编程爱好者联盟 2017-02-28
[blockquote]
希尔排序算法是按其设计者希尔(Donald Shell)的名字命名,该算法由1959年公布,是插入排序的一种更高效的改进版本。
[/blockquote]
希尔排序是基于插入排序的以下两点性质而提出改进方法的:
public class ShellSorter { public void sort(int[] array) { int d = array.length; do { d /= 2; shellPass(array, d); } while (d > 1); } private void shellPass(int[] array, int d) { // 直接插入排序 for (int i = d; i < array.length; i++) { int tmp = array[i]; if (array[i] < array[i - d]) { // 对同一个组的两个数进行比较,如果前面的数大于后面的数的话,交换位置 int j; for (j = i - d; j >= 0 && tmp < array[j]; j -= d) { array[j + d] = array[j]; } array[j + d] = tmp; } } } }
参考文章:
要知道时间复杂度只是描述一个增长趋势,复杂度为O的排序算法执行时间不一定比复杂度为O长,因为在计算O时省略了系数、常数、低阶。实际上,在对小规模数据进行排序时,n2的值实际比 knlogn+c还要小。