//希尔排序
public static void main(String[] args) {
int[] arr = {9, 6, 11, 3, 5, 12, 8, 7, 10, 15, 14, 4, 1, 13, 2};
sort(arr);
print(arr);
}
public static void sort(int[] arr){
//Knuth序列 h = 1 h = h * 3 + 1
int h = 1;
while (h < arr.length / 3){
h = 3 * h + 1;
}
//gap为希尔的间隔, 最优为Knuth, 也可每次取1/2
//希尔排序 按间隔排 先排间隔 依次缩小间隔
for (int gap = h ; gap > 0 ; gap = (gap - 1) / 3){
for (int i = gap ; i < arr.length ; i ++){
for (int j = i ; j > gap - 1 ; j = j - gap){
if (arr[j] < arr[j - gap]){
swap(arr, j, j - gap);
}
}
}
}
}
static void swap(int [] arr, int i, int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
static void print(int [] arr){
for (int i = 0 ; i < arr.length ; i ++){
System.out.println(arr[i]);
}
}
java希尔排序
希尔排序详解:算法实现与优化
最新推荐文章于 2025-11-26 15:59:01 发布
本文介绍了希尔排序的原理,通过实例展示了如何使用Knuth序列进行数组的排序,包括了核心代码、间隔选择策略和交换操作。深入理解并实践了这种高效的插入排序改进算法。
1241

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



