希尔排序(ShellSort)
希尔排序是 D.L.Shell 在1959提出的,所以叫希尔排序。
在直接插入排序中,若数据越接近有序,待排序元素越少,则时间效率越高。
希尔排序就是根据此优化插入排序的。
算法简述:
- 将一个序列分成若干组,每组有若干相隔一段距离(称为增量)的元素组成,在一个组内采用直接插入排序算法进行排序。
- 增量初值通常为序列长度的一半,之后每趟减半,最后减为1。
- 随着增量减少,组数也减少,组内元素增加,序列接近有序。
图画理解
代码实现
public class ShellSort {
private static int[] keys = {21,43,65,33,56,43,34};
public static void main(String[] args) {
sort(keys);
for(int i : keys){
System.out.println(i);
}
}
public static void sort(int[] keys) {
//控制增量每趟减半
for (int increment = keys.length / 2; increment > 0; increment/=2) {
for (int i = increment; i < keys.length; i++) {
int x = keys[i], j;
//循环组内直接插入排序
for (j = i - increment; j >= 0 && x < keys[j]; j -= increment) {
keys[j + increment] = keys[j];
}
keys[j + increment] = x;
}
}
}
}
总结
我的脑子要不够用了。。。