简单排序篇
列表排序的简单排序有三种,分别是 冒泡排序、选择排序和插入排序。
这里我们来讨论 插入排序:
插入排序
我们在玩牌的时候都会习惯把牌按一定顺序放置,那假设:
①初始手中有一张牌,而手中的牌都按顺序排好(默认从小到大)
②每次摸一张牌,将这张牌与手中的牌进行比较,放置在适当位置
③直到摸牌结束,全部牌在手中有序放置
以上不断摸牌插入到手中其实就是一种插入排序,即将无序区域的元素依次插入到有序区域,且过程中保证有序区域按从小到大顺序排列。
上图展示的便是对初始列表的第一次插入排序,先将无需区域第一个元素4拿出来,将其与有序区域元素进行比较,4<5因此将4放置到5前面,此时有序区域元素个数+1,无需区域元素个数-1,第一次插入排序结束。
之后便重复第一次的插入过程(如上图),直至无序区域元素个数为0时,结束排序,得到排序过后的有序新列表。
具体代码实现如下:
#插入排序
def insertion_sort(list):
for i in range(1,len(list)): #i表示抽到的牌的下标
tmp=list[i] #tmp抽到的牌
j=i-1 #j表示手里的最后面一张牌的下标
while j>=0 and list[j]>tmp: #抽到的牌小于手中的牌进入循环直至找到位置
list[j+1]=list[j] #比较过的手里的牌往后移一个位置
j-=1
else: #抽到的牌大于等于手里的牌,则放在手里所有牌的后面
list[j+1]=tmp
li=[1,8,5,9,4,6,7,2,11,3,16,12]
insertion_sort(li)
print(li)
运行结果如下:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 16]
插入排序是最后一种简单排序算法,它和前两个算法一样,时间复杂度都是O(n²)
至此,我们已经将最简单和基础的三个排序算法学完了,接下来还有三个重要的排序算法需要我们来攻克。
提示:下一篇开始进入重要排序篇——快速排序