数据结构—插入排序及其优化分析

本文介绍了插入排序的基本思想和具体实现,通过将待排序元素与已排序部分进行比较并插入合适位置。讨论了如何优化插入排序,引入了折半插入排序,利用二分查找减少比较次数,提高效率。最后分析了两种排序算法的稳定度、时间复杂度和空间复杂度。
摘要由CSDN通过智能技术生成

基本思想


每一步将待排序的元素,按照其排序码的大小,插入到前面已经排好序的一组元素的合适位置上去,直到元素全部插完为止(可以想象打牌的场景,每拿到一张牌,就要找到合适的位置,然后把牌插进去)。

具体算法实现


假设现有 n 个待排序的元素,对应的关键字分别为 a1、a2、……..an,因为第一个元素是有序的,所以从第二个元素开始,将 a2 与 a1 进行比较。若 a2 < a1,则将 a2 插入到 a1 之前;否则,说明已经有序,不需要移动 a2。

现在有序的元素变为2个,再从第三个元素 a3 开始,先和 a2 进行比较,若 a3小于a2,再将 a3 和 a1 进行比较,若 a3小于a1,则将 a3 插入到 a1 的前面;否则,说明已经有序,继续插入下一个元素。

但是,这个算法还存在一点bug,如果 a3大于a1 呢?这时我们就会想到搬移元素了,即先将要进行插入的元素附给变量 key ,用 key 和已经排好序的元素依次进行比较;像上面的问题,就可以先让 a2 搬移到 key 的位置,再将 key 插入。
这里写图片描述

(图画的比较丑,多多包涵啦)按照上述方法,直到最后一个元素插入完成。(整个过程可以想象成打牌,每拿到一张

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值