直接插入排序——排序算法(python)

1.直接插入算法

        直接插入排序是把新的数据插入已经排序好的数列中,排序的基本方法是:每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的适当位置上去,直到元素全部插入为止。

        直接插入算法不能任意使用,它比较适合待排序记录数目较少且基本有序的情形,如果数目过大,直接插入排序算法会大大降低性能。

        这是一种比较稳定的排序算法,时间复杂度为O(n²)。

2.实现代码

def InsertSort(mylist):
    length = len(mylist)
    for i in range(1, length):
        """探路的哨兵 -> j"""
        j = i - 1
        """
        如果哨兵指向的元素比当前元素大,将当前元素暂存起来,
        让哨兵指向的元素往后挪一位,哨兵继续往前探路
        """
        if mylist[i] < mylist[j]:
            tmp = mylist[i]
            mylist[i] = mylist[j]
            j -= 1
            """
            只要哨兵指向的元素比暂存的元素(tmp)大,
            哨兵就要把指向的元素往后挪一位,继续向前探路,
            直到碰到序列边界或者哨兵指向的元素小于tmp
            """
            while j >= 0 and tmp < mylist[j]:
                mylist[j + 1] = mylist[j]
                j -= 1
            """
            把tmp放在哨兵的后面
          (哨兵前面没路或者哨兵指向的元素比tmp小)
            """
            mylist[j + 1] = tmp
        
if __name__ == "__main__":
    mylist = [49, 38, 65, 87, 76, 13, 27, 49]
    InsertSort(mylist)
    print(mylist)

输出结果:

 [13, 27, 38, 49, 49, 65, 76, 87]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

New_Teen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值