希尔排序是一种基于插入排序的快速排序算法。
对于大规模的乱序排序算法,插入排序会很慢,因为它只会交换相邻的元素,因此元素只能一点点地从数组的一端移动到另一端。希尔排序为了加快排序,交换不相邻的元素对数组局部进行排序,并最终用插入排序将局部有序的数组排序。
对于大规模的乱序排序算法,插入排序会很慢,因为它只会交换相邻的元素,因此元素只能一点点地从数组的一端移动到另一端。希尔排序为了加快排序,交换不相邻的元素对数组局部进行排序,并最终用插入排序将局部有序的数组排序。
特点:对于中等大小的数组运行时间可接受。它的代码量小,且不需要额外的内存空间。
public static void shellSort(double[] 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 && compareTo(A[j-h], A[j]) == 1; j -= h)exchange(A, j-h, j);}h = h / 3;}}