标题:希尔排序求解
只看楼主
petsgf
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-9-11
结帖率:0
已结贴  问题点数:20 回复次数:4 
希尔排序求解
#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]有很多都不满足啊。。。。
 
搜索更多相关主题的帖子: for i++ printf int 排序 
2020-09-11 14:07
petsgf
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-9-11
得分:0 
顶!!!!!

2020-09-11 14:13
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:20 
d = d\3+1分别是4,2,1。
2020-09-11 15:27
petsgf
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-9-11
得分:0 
回复 3楼 apull
我就是用421算的,结果搞不懂sort函数怎么排序的,排不出来
2020-09-11 20:09
petsgf
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2020-9-11
得分:0 
自己鼓捣出来了,谢谢那位老哥

2020-09-11 20:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-503127-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058768 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved