标签(空格分隔): python-排序算法
再末排序序列中,构建一个子排序序列,知道全部数据排序完成;
再待排序的数,插入到已经排序的序列中合适的位置
增加一个哨兵,放入待比较值,让它和后面已经排好序的序列比较,找到合适的插入位置
1、增加一个哨兵位,每轮比较将待比较数放入
2、哨兵一次和待比较数的前一个数据比较,大数靠右移动,找到哨兵中值的插入位置
3、每一轮结束后,得到一个从开始到带比较数位置的一个有序序列
lst = [7, 9, 2, 5, 3, 1]
# 直接插入排序 - 升序排列
newlst = lst[:] # 原样拷贝一份数据
newlst = [0] + newlst # 增加一个哨兵位
length = len(newlst)
for i in range(2, length):
newlst[0] = newlst[i]
# 确定排序数据的有序区
j = i-1
if newlst[j] > newlst[0]: # 此处可以控制不会越界
while newlst[j] > newlst[0]:
newlst[j+1] = newlst[j]
print("----", newlst)
j -= 1
newlst[j+1] = newlst[0]
print("--", newlst)
print(newlst[1:])
n-1 次
n(n-1)/2 次
O(n**2)
稳定的意思是: [2, 1, 1, 3], 使用直接插入排序,第一个元素1,排序完,一定在第二个元素1的左边; 冒泡法和选择排序则不能保证
这里之所以能够引入二分,是因为插入排序会确定一个有序区,二分法的前提必须是数据有序
原文:https://www.cnblogs.com/jingru-QAQ/p/11421337.html