04希尔排序
基本思想:将整个待排序数组分割成若干个子序列,然后进行插入排序,最后全排序。
讲解:
//创建一个名为Shell_sort的方法,传递参数为待排序数组及其大小
public static void Shell_sort(int a[],int len){
//外层循环控制切割增量,固定写法,当然也可以选择其他增量设置
//k的起始值为:len / 2,要求大于0,每一次外循环k / 2
for(int k = len / 2;k > 0;k /= 2){
//中层循环控制遍历元素:k ~ len的所有元素
for(int i = k;i < len;i++){
//temp保存当前下标的元素值
int temp = a[i];
int j;
//内循环控制所有i到k中所有增量为k的元素
for(j = i;j >= k;j -= k){
//判断当前下标i的元素值和此时区间内的增量元素的大小关系
//若当前保存的temp值小于了区间内的增量元素,则
if(temp < a[j - k]){
a[j] = a[j - k];
//否则跳出
}else{
break;
}
}
//在一次内循环结束时,将temp的值插入到a[j]中
a[j] = temp;
}
}
}