数据结构与算法学习笔记七 --- 插入排序算法

插入排序算法(Insert Sort)

插入排序算法的原理:把未排序的序列分成两部分,即有序部分和无序部分(一般把序列的第一个元素当作有序部分,剩余的当作无序部分),然后依次从无序部分取出一个元素与有序部分的每个元素比较,然后在有序部分的合适位置插入,直到整个序列有序。

插入排序算法的原理与选择算法的原理比较

插入排序算法的原理与选择排序算法的原理很相似,都是将待排序序列分成两部分(有序部分和无序部分);
区别在于:

  • 选择排序是在无序部分进行比较的,从无序部分取出的值已经是无序部分的最大或者最小值了,就可以直接放在有序部分的头部或者尾部;
  • 插入排序是在有序部分进行比较的,从无序部分取出的值是按照无序部分的元素顺序取出,还得跟有序部分的元素进行比较才可知放在哪个位置。
插入排序算法的python实现

代码如下:
第一种:从有序部分的头部开始比较从无序部分取出的值

def insert_sort(alist):
    """插入排序"""
    # 外循环从右边无序序列中取值
    for right in range(1, len(alist)):
        target = alist[right]
        # 内循环将从右边取的值与左边的有序序列的值比较(左边的值从头开始比较)
        for left in range(0, right):
            if target < alist[left]:
                alist[left+1:right+1] = alist[left:right]
                alist[left] = target
                break
    return alist

第二种:从有序部分的尾部开始往前比较从无序部分取出的值

def insert_sort2(alist):
    # 外循环从右边无序序列取出多少个元素执行内循环的执行过程
    for j in range(1, len(alist)):
        # i 代表内循环的起始值
        i = j
        # 执行从右边的无序序列中取出第一个元素,即i位置的元素,然后将其插入到前面的正确位置
        # 内循环:将右边取的值,与左边有序序列的值比较(左边的值从后往前开始比较)
        while i > 0:
            if alist[i] < alist[i-1]:
                alist[i], alist[i-1] = alist[i-1], alist[i]
                i -= 1
            else:
                break
    return alist

插入排序算法的时间复杂度与稳定性
  • 最优时间复杂度:O(n) -->n 指外循环的循环次数(n-1)
  • 最坏时间复杂度:O(n2)
  • 稳定性:稳定
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值