C 希尔排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010095372/article/details/84259178

希尔排序有点麻烦了,我理解就是为什么每次要和前面一个数比大小来确定触发调动条件,而且每次也就一步一步地走?我可不可以每次大步大步地走,一次走3个,相应的我一次也隔3个比一次。最后这个步长越来越小,直到为1个。
下面这个图很厉害,网上的侵删。
在这里插入图片描述
将数组划分成长度很小的多个小组,小组内排好序,再稍微加大小组的长度,再排一次,知道这个小组成为数组的本体

void ShellSort(int a[], int n){
    int dk, i, j, temp;
    //小组的个数,小组的个数从n/2个,变成n/4,再变变变,越来越少,直到变成一个
    for (dk = n/2; dk >= 1; dk = dk/2) {
    	//因为这个小组的元素使隔了dk个,所以排的时候也要隔dk个
    	//有点像归并排序
        for (i = dk; i < n; i++) {
            if(a[i] < a[i-dk])
            {
                temp = a[i];
                for (j = i-dk; j >= 0 && temp < a[j]; j -= dk) {
                    a[j+dk] = a[j];
                }
                a[j+dk] = temp;
            }
        }
    }
}
5260391748
5160392748
2031475869
0123456789

猜你喜欢

转载自blog.csdn.net/u010095372/article/details/84259178