提示:我们介绍的都是基于顺序存储结构而言的,且是升序排序。
一、直接插入排序
①、哨兵模式
所谓的哨兵模式,就是说我们将待插入的元素提前存储在index=0的位置。
在插入排序的时候,我们总是从index=1的位置进行取待插入元素A(总是认为第一个元素是已经排好序的元素),将带插入元素A从原本的位置从后往前依次与前面的元素进行比较(待插入元素前面的元素已经排好序了),直到找到不小于A的元素B,将A插入到B的后面(这是一种排序算法稳定的算法)。
②、非哨兵模式
所谓的非哨兵模式,就是说我们将待插入的元素不提前存储在index=0的位置,而是存储在临时变量中。
比较思想同上。
二、折半插入排序
折半插入排序与直接插入排序的区别就在于在获取待插入位置的发方式的不同。
因为待插入元素前面的元素已经排好顺序了,所以我们才可以使用折半查找的方式获取待插入元素的插入位置。折半插入排序也是可以分为"哨兵模式"和"非哨兵模式"。在这里我就不重复造轮子了,不再过多赘述了。
我们在使用折半查找的方式寻找待插入位置的时候,我们需要注意:当待插入元素与折半查找中所匹配到的元素相同是我们依然要进行下一次比较,原因我们需要保证排序算法的稳定性。
这一点大家可以思考一下。
✈ ❀ 希望平凡の我,可以给你不凡の体验 ☂ ✿ ,白嫖有罪 ☠ ,记得关注哦 ❥(^_-)