【无标题】插入排序


插入排序是啥?
想象一下,你手里有一副牌,你想要把它们按顺序排好。插入排序就是这个理儿,不过它不是一次把所有牌都排好,而是一张一张来。
直接插入排序怎么玩?
假设你已经排好了第一张牌,这就是你的“有序序列”。
然后你拿出第二张牌,看看它应该插在哪,是插在第一张牌前面,还是后面,反正得让它排好。
接着,你继续拿出剩下的牌,每拿一张,就把它放到前面已经排好的牌里合适的位置。
这个过程就像是你在玩接龙,每次只能放一张,直到所有牌都排好。
折半插入排序有啥不同?
折半插入排序就像是你玩接龙的时候,有个小帮手。这个小帮手帮你快速找到应该把牌插在哪里,而不是一张一张去试。
你先告诉小帮手,你要插的牌大概在哪个位置。
小帮手用一种快速的方法(折半查找),帮你找到最合适的位置。
然后你把牌直接放到那里,搞定。
希尔排序又是啥?
希尔排序就像是你玩接龙的时候,不是一次只放一张牌,而是一次放一小堆。
你先把牌分成几堆,每堆的牌数一样,但是堆和堆之间可能有重复的牌。
然后你先在每一堆里把牌排好。
接着,你减少每堆的牌数,再重复上面的步骤。
最后,当每堆只剩下一张牌的时候,所有的牌就都排好了。
这些排序方法有啥用?
直接插入排序和折半插入排序适合用在那些数据不多,或者数据已经有点顺序的情况下。
希尔排序适合用在数据量大,但是希望排序速度快一点的情况下。
稳定性是啥?
稳定性就是说,如果你有两张相同的牌,排序之后,这两张牌的相对位置不会变。比如原来这两张牌是挨着的,排完序后,它们还是挨着的。
 

 

知识点链接

插入排序是一种简单直观的排序算法,其基本思想是将一个记录插入到已经排好序的序列中,使得插入后的序列仍然有序。以下是对文件内容的详细解释:
概述
基本思想:将待排序的记录根据关键字大小插入到前面已排好序的序列中。
直接插入排序
概念:首先将序列的第一个元素视为有序序列,然后将剩余的元素依次插入到这个有序序列中。
实现过程:
将序列分为有序序列和无序序列两部分。
每次从无序序列中取出一个元素,并在有序序列中找到合适的位置插入。
插入后,将插入点后的所有元素向后移动一位。
性能分析:
空间复杂度:O(1)
时间复杂度:
最好情况:O(n),当元素已经有序时。
最坏情况:O(n^2),当元素完全逆序时。
平均情况:O(n^2)
稳定性:稳定,即相同元素的相对位置不会改变。
折半插入排序
概念:使用折半查找来确定插入位置,然后一次性移动元素并插入。
实现过程:
确定折半插入排序的范围,使用折半查找找到插入位置。
一次性移动数据。
插入元素。
性能分析:
空间复杂度:O(1)
时间复杂度:取决于折半查找的效率,通常也接近O(n^2)。
稳定性:稳定。
希尔排序
概念:希尔排序是插入排序的一种改进,通过将序列分组并在组内进行直接插入排序。
实现过程:
选择一个步长d,将序列分为d组,每组内进行直接插入排序。
逐步减小步长d,重复上述过程。
当步长d减小到1时,完成排序。
性能分析:
空间复杂度:O(1)
时间复杂度:通常比直接插入排序好,但具体取决于步长序列的选择。
稳定性:不稳定。
适用性:仅适用于顺序存储的线性表。
适用性
直接插入排序和折半插入排序适用于顺序存储和链式存储的线性表。
希尔排序仅适用于顺序存储的线性表。
插入排序算法简单,易于实现,但效率不高,特别是对于大数据集。然而,对于小数据集或基本有序的数据集,插入排序可以非常高效。希尔排序通过分组和逐步减小步长的方式,提高了插入排序的性能,但牺牲了稳定性。
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值