个人技术博客地址:http://songmingyao.com/
原理
- 在列表左侧构建有序序列
- 一开始将第一个元素视为有序序列
- 对于未排序序列,则将未排序序列中的元素依次从右到左与已排序序列中的元素做比较
- 如果未排序元素小于当时比较的已排序元素,则将该已排序元素右移
- 如果未排序元素大于当时比较的已排序元素,则说明该元素已插入到合适位置,此轮循环结束
- 以此类推
源码
def insert_sort(l):
n = len(l)
# 要排序的元素
for i in range(1, n):
# 已排序的元素
for j in range(i, 0, -1):
if l[j] < l[j-1]:
l[j], l[j-1] = l[j-1], l[j]
else:
break
if __name__ == '__main__':
l = [6, 5, 2, 8, 9, 4, 1, 0, 3, 7]
print(l)
insert_sort(l)
print(l)
时间复杂度
- 最优时间复杂度:O(n)
- 最坏时间复杂度:O(n2)
- 稳定性(多个元素等值的情况下是否会破坏原有顺序):稳定
网友评论