排序--希尔排序

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的次数。
希尔增量的问题在于,这些增量对未必是互素的,因此较小的增量可能影响很小。

点赞