04希尔排序

23 阅读1分钟

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;
            }
        }
    }