编程爱好者联盟 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还要小。