已有17人关注
怎么弄希尔排序法?
发表在C++图书答疑 2018-01-17 悬赏:1 学分 《C++从入门到精通(第3版)》第8章 构造数据类型
是否精华
版块置顶:

U8FT~({HS58BBTHWN`FT]XE.png

#include<stdio.h>

int p(int a[],int low,int high)

{

  int key=a[low],p;

  while(low<high)

  {

     while (low<high && a[high]>=key)

--high;

p=a[low];a[low]=a[high];a[high]=p;

while(low<high && a[low]<=key)

++low;

p=a[high];a[high]=a[low];a[low]=p;

  }

  a[low]=key;

  return low;

}

void q(int a[],int low,int high)

{

  int j;

  if(low<high)

  {

    j=p(a,low,high);

q(a,low,j-1);

q(a,j+1,high);

  }

}

int main()

{

  int p(int a[],int low,int high);

  void q(int a[],int low,int high);

  int a [10];

  int i;

  printf("请输入10个数,数之间用空格隔开\n");

  for(i=0;i<10;i++)

 scanf("%d",&a[i]);

  printf("快速排序法有小到大排序为\n");

  for(i=0;i<10;i++)

 printf("%d",a[i]);

  printf("\n");

}

程序错的怎么改写成  希尔排序法(输入是个数字空格个开,用希尔排序法把它们按从小到大方式输出)

分享到:
精彩评论 1
大米粥
学分:1330 LV8
TA的每日心情
伤心
2017-05-02 10:51:31
2018-01-19
沙发

#include <stdio.h>

void Shell_Sort(int a[],int n)

{

    int i,j,d;

    for(d=n/2;d>0;d/=2)

    {

        for(i=d;i<n;++i)

        {

            int temp=a[i];

            for(j=i;j>=d&&a[j-d]>temp;j-=d)

                a[j]=a[j-d];

            a[j]=temp;

        }

    }

}


int main()

{

  int a [10];

  int i;

  int n;

  printf("请输入10个数,数之间用空格隔开\n");

  for(i=0;i<10;i++)

 scanf("%d",&a[i]);

  printf("快速排序法有小到大排序为\n");

  n=sizeof(a)/sizeof(int),i;

    Shell_Sort(a,n);

    for(i=0;i<n;i++)

        printf("%d ",a[i]);

    return 0;

}



你原来的代码中将函数声明写在主函数中,并且在主函数中并未调用自定义函数。

首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照