"""
插入排序:时间复杂度 O(n^2)
从列表的第一项元素开始,将这部分元素看做排好序的子列表
逐步将后续的元素,寻找合适的位置,插入到前面的子列表中去
"""
def insertionSort(alist):
# 从第二个元素开始遍历,因为要与前一个元素比较
for index in range(1, len(alist)):
# 首先 记录 需要排序的 这个元素
currentValue = alist[index]
# 初始化开始比较的位置 position
position = index
# 将要排序的元素 与 position 前面的元素相比较,如果要排序的元素比较小
while position > 0 and alist[position - 1] > currentValue:
# 就把 position 前面的元素往后移
alist[position] = alist[position - 1]
# 更新 position 的值,与更前面的元素比较
position -= 1
# 如果 position = 0,代表比较到头了,前面没有元素,这个元素是最小的 alist[0] = currentValue
# 如果 alist[position - 1] < currentValue,代表前面的元素比要排序的元素小,把要排序的值放在当前位置即可
alist[position] = currentValue
a = [123, 36, 1, 96, 23, 65, 12, 7, 3, 63, 6]
insertionSort(a)
print(a)