希尔排序与归并排序一样,应用数据分组的方法。归并排序是相邻的元素(连续元素)组合为一个分组,希尔排序是相同距离的元素组成一个分组,因此分组中的元素并不相邻。希尔排序又称为缩小增量排序(diminishing increment sort),组成一个分组的元素的距离,增量dk,逐渐减少,增量序列存放在一个数组delt[0..t-1]中,dk=delt[k]。算法将数据组织成dk个数据分组,每一个分组是插入排序,在《计算机程序设计的艺术》中,插入排序被比喻为桥牌选手在理牌,实际上插入排序没有将已排序数据和待排序数据一起组织起来,仅仅将已排序数据组成了一个部分有序的序列,而希尔排序将所有元素组成dk个分组,dk减小,则分组中的元素增加,因此是整体的组织,完成了分组有序。希尔排序中的一个数据分组,i=dk+1,++i,用从后向前的方向,i-dk,进行插入排序。每一个元素i,在排序前,同一个分组的所有前驱元素,已组成了一个部分有序的有序表。
《计算机程序设计的艺术》将排序算法,根据算法原理,分为插入排序,交换排序,选择排序,归并排序,和基数排序。Quicksort是交换排序,最值序列的Heapsort是选择排序。
源程序
C语言伪代码
void Shellinsert(SqList &L, int dk){
/*对顺序表L作一趟希尔插入排序。数据分组的相邻元素(前后记录位置)的增量是dk,*/
/*而不是1 */
for(i=dk+1; i<=L.length; &#