希尔排序(改进版插入排序)
排序原理:
- 选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组;
- .对分好组的每一组数据完成插入排序;
- 减小增长量,最小减为1,重复第二步操作。
图列
- 初始增量第一趟 gap = length/2 = 4


- 第二趟,增量缩小为 2

- 第三趟,增量缩小为 1,得到最终排序结果

代码
public class ShellSort {
public static void main(String[] args) {
int[] arr = {14, 21, 2, 32, 29, 43, 43, 13, 12, 30, 19, 34, 38, 8, 48};
sort(arr);
for (int a : arr) {
System.out.print(a + ", ");
}
}
public static void sort(int[] arr) {
//确定步长
int h = 1;
while (h < arr.length / 2) {
h = 2 * h + 1;
}
while (h >= 1) {
for (int i = h; i < arr.length; i++) {
for (int j = i; j >= h; j -= h) {
if (arr[j] < arr[j-h]) {
int tmp = arr[j];
arr[j] = arr[j - h];
arr[j - h] = tmp;
}else{
break;
}
}
}
h = h / 2;
}
}
}
433



被折叠的 条评论
为什么被折叠?



