读书人

希尔排序的一个有关问题

发布时间: 2012-05-16 11:12:12 作者: rapoo

希尔排序的一个问题

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


探讨
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];
f……

[解决办法]
全过程:

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后进行再次排序就可以完成整个排序了

读书人网 >C语言

热点推荐