希尔排序的算法 麻烦思路详细解答
void ShellInsert(list R,int n,int h) {
//一趟插入排序,h为本趟增量
int i,j,k;
for(i=1;i<=h;i++)//i为组号
for(j=i+h;j<=n;j+=h) {//每组从第2个记录开始插入
if(R[j].key>=R[j?h].key) continue;
R[0]=R[j];//R[0]保存待插记录,但不是监视哨
k=j?h;//待插记录的前一个记录
do {//查找插入位置
R[k+h]=R[k];k=k?h;//后移记录,继续向前搜索
} while(k>0 && R[0].key<R[k].key);
R[k+h]=R[0];//插入R[j]
}
}
主要是对后移记录中 k=k-h;这句不明白 前面不是已经k=j-h;这样不就是负数了么 最好能给个例子 讲解下 谢谢~
[解决办法]
http://blog.csdn.net/morewindows/article/details/6668714