一个简单的希尔排序法,

来源:百度知道 编辑:UC知道 时间:2024/05/10 14:17:49
void shellpass(int d,int n)
{
int i,j;
for(i=d+1;i<=n;i++)
if(R[i]<R[i-d])
{
R[0]=R[i];j=i-d;
do{
R[j+d]=R[j];
j=j-d;
}while(j>0&&R[0]<R[i]);
R[j+d]=R[0];
}
}
void shell_sort(int n)
{
int increment=n;
do{
increment=increment/3+1;
shellpass(increment,n);
}while(increment>1);
}
这是一个希尔排序法的函数代码,这代码其余的都不能理解,就是第十行的:j=j-d不懂,希望大家给我讲解一下它的来龙去脉,谢、过。

j=j-d;
简单插入排序中j=j-1,是前一个元素,而希尔排序是对简单插入排序的改进,一次不是对所有的元素进行排序;而是将元素分成若干个组
如:1 5 3 7 18 6 2 9 4
如果d是3,则分组为{1 7 2}{5 18 9}{3 6 4}
每个组见进行排序;
j=j-d;如果j=4,
则应该前面的j=1时的元素比较,而不是j=3时的元素比较