1.直接插入算法
直接插入排序是把新的数据插入已经排序好的数列中,排序的基本方法是:每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的适当位置上去,直到元素全部插入为止。
直接插入算法不能任意使用,它比较适合待排序记录数目较少且基本有序的情形,如果数目过大,直接插入排序算法会大大降低性能。
这是一种比较稳定的排序算法,时间复杂度为O(n²)。
2.实现代码
def InsertSort(mylist):
length = len(mylist)
for i in range(1, length):
"""探路的哨兵 -> j"""
j = i - 1
"""
如果哨兵指向的元素比当前元素大,将当前元素暂存起来,
让哨兵指向的元素往后挪一位,哨兵继续往前探路
"""
if mylist[i] < mylist[j]:
tmp = mylist[i]
mylist[i] = mylist[j]
j -= 1
"""
只要哨兵指向的元素比暂存的元素(tmp)大,
哨兵就要把指向的元素往后挪一位,继续向前探路,
直到碰到序列边界或者哨兵指向的元素小于tmp
"""
while j >= 0 and tmp < mylist[j]:
mylist[j + 1] = mylist[j]
j -= 1
"""
把tmp放在哨兵的后面
(哨兵前面没路或者哨兵指向的元素比tmp小)
"""
mylist[j + 1] = tmp
if __name__ == "__main__":
mylist = [49, 38, 65, 87, 76, 13, 27, 49]
InsertSort(mylist)
print(mylist)
输出结果:
[13, 27, 38, 49, 49, 65, 76, 87]
2056

被折叠的 条评论
为什么被折叠?



