注册 登录
编程论坛 C语言论坛

希尔排序求解

petsgf 发布于 2020-09-11 14:07, 1266 次点击
#include <stdio.h>
#include <stdlib.h>

void sort(int s[],int n, int d)
{
    int i,j;
    for(i = d+1;i<n;i++)
    if(s[i]<s[i-d])
    {
        s[0]= s[i];
        j=i-d;
        do
        {
            s[j+d] =s[j];
            j -= d;
        }
        while(j>0&&s[0]<s[j]);
        s[j+d]=s[0] ;
    }
 }
 
 void shellsort(int r[],int n)
 {
     int d=n;
     do
     {
      d = d/3+1;
      sort(r,n,d);   
    }
    while(d>1);
 }
 
 int main()
 {
     int i,x[11];
     printf("请输入十个整数:");
     for(i=1;i<=10;i++)
     {
     scanf("%d",&x[i]);   
     }
     puts("你输入的序列是:") ;
     for(i=1;i<=10;i++)
     printf("%3d ",x[i]);
     shellsort(x,11);
     printf("\n希尔排序的结果如下:");
     for(i=1;i<=10;i++)
     printf("%3d",x[i]);
     printf("\n");
 }
 
 
 大佬梦帮我看看这个程序,解析以下。为啥我排不出来啊。。。。
d = d\3+1不是为4吗???
s[i]<s[i-d]有很多都不满足啊。。。。
 
4 回复
#2
petsgf2020-09-11 14:13
顶!!!!!

#3
apull2020-09-11 15:27
d = d\3+1分别是4,2,1。
#4
petsgf2020-09-11 20:09
回复 3楼 apull
我就是用421算的,结果搞不懂sort函数怎么排序的,排不出来
#5
petsgf2020-09-11 20:41
自己鼓捣出来了,谢谢那位老哥

1