#要点
插入排序的基本思想
插入排序的算法实现
插入排序的代码实现
插入排序的基本思想
插入排序的基本思想是每次取一个列表元素与列表中已经排好序的列表段进行比较,然后插入从而得到新的排序好的列表段,最终获得排好序的列表。
插入排序的算法实现
对于列表中的一组元素,初始时假设第一个记录自成一个有序序列,其余的记录为无序序列;随后从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列中为止。
重点:使用哨兵,用于临时存储和判断数组边界。
具体操作步骤如下:
具体操作如下:
(1)待排序:[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]
(2)第一次比较:[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48] 第二个元素(44)与之前的元素进行比较,发现44大,不做交换;
(3)第二次比较:[3,38,44,5,47,15,36,26,27,2,46,4,19,50,48] 第三个元素(38)与之前的元素进行比较,发现38比较小,将38与44交换位置,然后与3进行比较,38比较大,不做交换,
(4)以此类推…
插入排序的代码实现
list_01 = [10, 1, 35, 61, 89, 36, 55]
def insert_sort(target_list):
for i in range(1, len(target_list)):
x = target_list[i]
j = i - 1
while j >= 0 and target_list[j] > x:
target_list[j + 1] = target_list[j]
j -= 1
target_list[j + 1] = x
return target_list
# 测试代码
print(insert_sort(list_01))
从代码里我们可以看出,如果找到了合适的位置,就不会再进行比较了,就好比牌堆里抽出的一张牌本身就比我手里的牌都小,那么我只需要直接放在末尾就行了,不用一个一个去移动数据腾出位置插入到中间。
所以说,最好情况的时间复杂度是 O(n),最坏情况的时间复杂度是 O(n2),然而时间复杂度这个指标看的是最坏的情况,而不是最好的情况,所以插入排序的时间复杂度是 O(n2)。