阿苏尔
2016-05-11 15:08
采纳率: 100%
浏览 1.3k
已采纳

希尔排序问题,求帮忙解答

#include

#define NUM 15
void shellsort(int [], int);

int main()
{
int i = 0;

int v[NUM] = {3,1,4,5,2,8,6,7,9,12,15,23,21,15,10};
shellsort(v,NUM);
for(i = 0; i < NUM; i++)
    printf("%d\n",v[i]);
return 0;

}
//希尔排序
void shellsort(int v[], int n)
{
int gap; //元素距离
int i, j, temp = 0;

for(gap = n/2;gap > 0; gap /= 2)//控制两个被比较元素的距离,从n/2开始,逐步进行对折,知道距离为0
    for(i = gap; i < n; i++)    //用于在元素间移动位置
      for(j = i - gap; j >=0 && v[j] > v[j+gap]; j -= gap) //比较各对相距gap个位置的元素,逆序时交换
        {
            temp = v[j+gap];
            v[j+gap] = v[j];
            v[j] = temp;
        }

}

问题在于,我不明白原书中,第三个嵌套for中,j-=gap是用来干嘛的?,为什么要这么做?我是新手,希望大家帮帮忙

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

2条回答 默认 最新

相关推荐 更多相似问题