希尔排序(Shellsort)
希尔排序是冲破二次时间屏障的第一批算法之一。
希尔排序通过比较相距一定间隔的元素来工作;各躺比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。由于这个原因,希尔排序有时也叫做缩减增量排序。
希尔排序使用一个序列h1,h2,…,hi,这个序列叫做增量序列(increment sequence)。增量序列只要求h1=1,以及hi>hi-1。在使用hk的一趟排序之后,对于每一个i我们都有a[i] <= a[i+hk];所有间隔hk的元素都被排序。此时称文件是hk-sorted(hk排序的)。
希尔的增量序列
增量序列的一个流行(但是不好)的选择是使用Shell建议的序列:ht = (N/2)向下取整和hk = (hk+1/2)向下取整。
希尔排序的原理以及编程实现
希尔排序的原理:
下面是使用希尔序列的希尔排序的编程实现:
/**
* 希尔排序的实现例程。
* 希尔排序以增量进行分组&