希尔排序在数组中采用跳跃式分组的策略,通过某个增量将数组元素划分为若干组,然后分组进行插入排序,随后逐步缩小增量,继续按组进行插入排序操作,直至增量为1。希尔排序通过这种策略使得整个数组在初始阶段达到从宏观上看基本有序,小的基本在前,大的基本在后。然后缩小增量,到增量为1时,其实多数情况下只需微调即可,不会涉及过多的数据移动。
代码实现:
public class Shell { public static void sort(Coparable[] a) { int N=a.length; int h=1; //分成若干组 while (h<N/3) h=3*h+1; while(h>=1) { for(int i=h;i<N;i++) { for(int j=i;j>=h;&&less(a[j],a[j-h]);j-=h;) exch(a,j,j-h); } h=h/3; } } }