2. 分组插入排序**:**希尔排序将数组按照一定的间隔分成若干个子序列,对每个子序列进行插入排序。由于子序列的长度较短,插入排序的时间复杂度较低,从而提高了排序的效率。
3. 大幅度减少逆序对**:**由于希尔排序是通过间隔分组进行插入排序的,每次排序都会将相距较远的元素进行比较和交换,从而大幅度减少了逆序对的数量。逆序对的数量是衡量一个排序算法效率的指标,逆序对越少,排序效率越高。
4. 非稳定性**:**希尔排序是一种非稳定的排序算法。在排序过程中,相同大小的元素可能会发生交换,导致原来相对顺序的改变。
总结起来,希尔排序是一种高效的排序算法,通过缩小增量和分组插入排序的方式,大幅度减少了逆序对的数量,从而提高了排序效率。虽然希尔排序存在一定的非稳定性,但在实际应用中并不影响排序结果的正确性。希尔排序在大多数情况下都能够比较好地工作,并且****适用于各种规模的数据集。
理解
希尔排序是插入排序的优化,他把整个列表按照定义的gap(为步长【也叫增量】)切割【隔着gap切割而非连续切割】成多个子列表,然后对子列表进行排序,排完序以后的整个列表,若还是存在无序,我们可以将增量递减,继续进行插入排序,直到增量为1,当增量为1的时候整个列表直接进行插入排序,此时,已经在前面排好的基础上进一步进行插排,因此希尔排序在最后进行插排的时候比整个无序表进行插排的速度快很多。
子列表的个数 = 步长
过程演示
Step1:
</