插入排序:
2,4,3,1,6,7,5
从2开始执行,放在第一个位置:
2 4,3,1,6,7,5
再拿出4,与2比较,比2 大放在2 后面
2,4 3,1,6,7,5
再拿出3,与4比较,比4小放在4前面,比2大放在2后面
2,3,4 1,6,7,5
依次类推,最终取得
1,2,3,4,5,6,7
# coding:utf-8
def insert_sort(alist):
"""插入排序"""
n = len(alist)
# 从右边的无序数列中取出多少个元素执行如下循环
for j in range(1,n):
#j = 【1,2,3,n-1】
#i = 代表内层循环开始值
i = j
#执行从右边的无序数列中取出第一个元素,即i位置元素,然后将其插入到前面的正确位置
while i > 0:
if alist[i] < alist[i-1]:
alist[i],alist[i-1] = alist[i-1],alist[i]
i = i-1
else:
break
if __name__ == "__main__":
li = [54,26,93,17,77,31,44,55,20]
print(li)
insert_sort(li)
print(li)
插入排序的最优复杂度为O(n)(序列已经处于升序序列)
最坏时间复杂度O(n的2次方)