插入排序
参考: 插入排序(动图理解)
# insertsort
"""
拿后一个数跟前一个数比
如果后面的数大于前面的数就忽略,否则交换位置
交换位置后,再继续跟前一个数比,然后重复这个步骤,直到没比他小的或索引为0
"""
def insert_sort(li):
n = len(li)
# 认为第一个数有序,每次从后面取一个数
for j in range(1, n):
# 从后面取一个数据(倒着取数),跟插入到前面的有序序列中
for i in range(j, 0, -1):
# 拿当前位置与前面位置数据进行比较
if li[i] < li[i - 1]:
li[i], li[i - 1] = li[i - 1], li[i]
else:
break
if __name__ == '__main__':
l = [4, 2, 3, 5, 1]
l = [5, 4, 3, 2, 1]
insert_sort(l)
print(l)
# 稳定性:稳定
# 最坏时间复杂度:O(n^2)
# 最优时间复杂度:O(n)