介绍
插入排序的工作原理是,对每个未排序数据, 插入到前面以排序的数据中,从后往前比较插入
步骤:
- 从第一个元素开始,该元素可以认为已经被排序
- 取出下一个元素,在已经排序的元素序列中从后向前扫描
- 如果被扫描的元素(已排序)大于新元素,将该元素后移一位
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
- 将新元素插入到该位置后
- 重复步骤2~5
代码实现
def insert_sort_(lst):
n = len(lst)
for i in range(1,n):#默认第一个是已经排好序的
if lst[i] < lst[i-1]:#如果本次的值小于前一个(前面是排好序的)
num = lst[i] # 记录本次的值
index = i # 记录值的下标
for j in range(i - 1, -1, -1): # 从i-1 循环到 0 (包括0)
if lst[j] > num:#此数大于本次值
lst[j + 1] = lst[j]#此数向后移一位
index = j # 记录带插入的下标
else:
break
lst[index] = num
优化
看网上比较多的一种思想是,在向前插入的时候,使用二分查找法,减少比较此数
def insert_sort_1(lst):