在本文中使用到的升序,降序,交换函数的代码以及插入排序的思想见:这篇博客
在上述博客中的插入排序中有介绍了插入排序的两个特点:
(1)当待排序序列的有序性比较高时,排序的效率比较高;
(2)当待排序序列的元素个数较少时,排序的效率比较高。
本文中介绍的希尔排序就是利用插入排序的两个特点来实现的。
希尔排序
例如,待排序序列为:10 30 20 60 50 30 20 70 90
(1)首先取步长gap为3,进行如下分组,然后在组内先进行插入排序:
第一组:10 60 20 排序后:10 20 60
第二组:30 50 70 排序后:30 50 70
第三组:20 30 90 排序后:20 30 90
将上述排序后的分组再按原下标进行合并:10 30 20 20 50 30 60 70 90
(2)再取步长gap为2,进行如下分组,然后在组内进行插入排序:
第一组:10 20 50 60 90 排序后:10 20 50 60 90
第二组:30 20 30 70 排序后:2