希尔排序的一个问题
- C/C++ code
void shell_sort(int a[], int n){ int gap, i, j, tmp; for (gap = n / 2; gap > 0; gap /= 2) { for (i = gap; i < n; i++) { tmp = a[i]; for (j = i; j >= gap && tmp < a[j-gap]; j -= gap)// 为什么不是j>0呢。。j >= gap 有什么意义吗????。。 a[j] = a[j-gap]; a[j] = tmp; } }}
[解决办法]
j >= gap && tmp < a[j-gap];
[解决办法]
全过程:
gap=5
i=5
i=6
i=7
i=8
i=9
j=9
gap=2
i=2
i=3
i=4
j=4 j=2
i=5
i=6
i=7
i=8
i=9
j=9 j=7
gap=1
i=1
i=2
j=2
i=3
i=4
j=4
i=5
i=6
i=7
j=7
i=8
i=9
j=9
[解决办法]
j如果光是大于0,如果出现j>0但是j<jap,你说a[j-gap]代表了什么??希尔排序就是利用间距来对数据进行局部排序,知道间距为1后进行再次排序就可以完成整个排序了