给定无序的数组,进行排序。
分析:
(1)希尔德思想是避免大量数据的移动,先比较相距较远的元素,再比较较近的元素。
(2)希尔建议gap(间隔)从N/2开始,并一直减半,知道gap等于1。
(3)在最坏情况下,希尔增量表现出了二次行为。
(4)gap除以2.2在实践中表现出优秀的性能。
算法[O(N的3/2次方)]:
public void shellSort( int[] a ) {
for( int gap=a.length/2; gap>0; gap=(gap==2?1:(int)(gap/2.2)) ) {
for(int i=gap; i<a.length; i++) {
int tmp = a[i] ;
int j = i ;
for( ; j>=gap&&tmp.compareTo(a[j-gap])<0; j-=gap)
a[ j ] = a[ j-gap ] ;
a[ j ] = tmp ;
}
}
}