这是一个SHELL排序法的例子,中间有点问题不懂
这是一个SHELL排序法的例子,中间有点问题不懂
//ntn 是数组的个数
for(gap = ntn /2; gap > 0; gap /=2) {
for(i = gap; i < ntn; i++){
for(j = i-gap; j>=0; j-=gap){
这里是比较交换的部分
}
}
}
我不明白的地方是,为什么要j -= gap,这样一来,不是有了很多重复的比较, 比如说
i = 5, gap=1, 这时候j从4开始,比较位置4和5,然后j -= gap,这时候j=3,比较3和4的位置,可是这之前在i = 4的时候,已经比较过了啊
请高人帮助!