package _2_1递归;
//增量排序,一趟一个增量,用增量来分组,组内执行插入排序
/*
* 1、按照增量(通常为总长度的一半)分组
* 2、按照上一个分组,每个组内进行排序
* 3、减小增量(减半),重新分组(重复以上步骤,直到增量为1,为最后一次排序)
* 4、以上排序皆用插入排序法*/
public class 希尔排序 {
public static void main(String args[]) {
int[] arr= {9,8,7,6,5,4,3,2,1};
f(arr);
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
}
public static void f(int[] arr) {//双层循环,外层循环确定增量,内层循环对各组进行插入排序
for(int interval = arr.length/2;interval>0;interval = interval/2) {//interval(中义):间隔
for(int i = interval;i<arr.length;i++) {
int target = arr[i];
int j = i-interval;
while(j>-1&&target<arr[j]) {
arr[j+interval] = arr[j];
j=j-interval;
}
arr[j+interval] = target;
}
}
}
}
希尔排序示例
最新推荐文章于 2024-10-06 20:16:20 发布