Python基础排序算法之直接插入排序

#要点
插入排序的基本思想
插入排序的算法实现
插入排序的代码实现

插入排序的基本思想

  插入排序的基本思想是每次取一个列表元素与列表中已经排好序的列表段进行比较,然后插入从而得到新的排序好的列表段,最终获得排好序的列表。

插入排序的算法实现

  对于列表中的一组元素,初始时假设第一个记录自成一个有序序列,其余的记录为无序序列;随后从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列中为止。
  重点:使用哨兵,用于临时存储和判断数组边界。
  具体操作步骤如下:
在这里插入图片描述

具体操作如下:
(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)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值