数据结构与算法(python版)(十)
1、插入排序(Insertion sort)
通过构建左侧有序序列,对未排序数据,在已排序元素中从后向前扫描,找到相应位置并插入。插入排序的实现时,在从后往前额扫描过程中需要反复把已排序元素逐步向后挪位,为新元素提供空间。
2、插入排序的实现
#插入排序
#关键代码
#if alist[i] < alist[i-1]:
# #当前元素与前一元素进行比较,若当前元素小,则与前一元素交换位置
# alist[i], alist[i-1] = alist[i-1], alist[i]
# i -= 1 #交换位置后元素下标
#else:
# break #若元素比前一元素大,则跳出循环
def insert_sort(alist):
for i in range(1, len(alist)):
#一开始令第一个元素是正确序列,则i=1元素开始插入,i=1元素插入后,正确排序的元素个数为2;则从i=2元素开始插入
#i : 1,2,3,...,n-1(最后一个元素)
while i > 0:
#一次循环结束,一个元素插入到正确序列
if alist[i] < alist[i-1]:
alist[i], alist[i-1] = alist[i-1], alist[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)
3、时间复杂度
最优时间复杂度:O( n n n)
最环时间复杂度:O( n 2 n^2 n2)
稳定