希尔排序的问题 C语言 编程,请问一下程序哪里有错误?

2025-03-25 17:35:19
推荐回答(1个)
回答(1):

#include 
#include 

void ShellSort(int r[], int n)
{
  int i,j,k=0,h;
   int t;
  int m, index;
   int H[50];
 
  m=(int)(log(n)/log(2));

   printf("数据m=[%d]\n", m);
   for(index=0;index    {
    H[index]=(int)(pow(2,index)); 
    printf("H[%d]=[%d]\n", index, H[index]);
}
    /* 希尔排序的增量序列存放在H中, H[0] = 1 */
   for(index=m-1;index>=0;index--) /*改变增量步长的循环 */ 
{
    h=H[index];
     printf("h=[%d]\n", h);
    
      for(i=0;i   {
     for(j=i+h;j {
     if(r[j-h]>r[j])
{
      t= r[j];
      k=j-h;        
          while(k >= 0 && t   {
        r[k+h]=r[k];
         k-=h;
             }         
             r[k+h]=t;
           }
}
  } 
   }
    
}
 
int main(void)
{
int num[100];
int n,i,sel;
 
   printf("输入数据长度:");
scanf("%d",&n); 
printf("依次输入%d个数据:\n",n);

for(i=0;i {
scanf("%d",&num[i]); 

ShellSort(num, n);
 
    printf("排序结果为:");
for(i=0;i {
printf("%d ",num[i]);
}
printf("\n");

return 0;
}

这是调试完的

你参考下吧