shellSort 又称为增量排序,间隔gap的位置组成的数组都各自排好序,再gap越来越小直到1,排好整个数组。
public static <AnyType extends Comparable<? super AnyType>>
void shellSort(AnyType [] a)
{
int j;
for(int gap= a.length/2; gap> 0; gap/=2)
//每个间隔gap的组成的数组插入排好序
//直到gap越分越细
for(int i= gap; i< a.length; i++)
{
AnyType tmp= a[i];
for(j= i; j>= gap && tmp.compareTo(a[j-gap])< 0; j-= gap)
a[j]= a[j-gap];
a[j]= tmp;
}
}
最坏的情形是花费 =N*N的次数。
希尔增量的问题在于,这些增量对未必是互素的,因此较小的增量可能影响很小。