标题:对数组中十个数排序,然后输入一个数后,按原来排序的规律将其插入到数组中
只看楼主
shanji1201
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-12-16
结帖率:100%
已结贴  问题点数:20 回复次数:9 
对数组中十个数排序,然后输入一个数后,按原来排序的规律将其插入到数组中
似乎问题比较多,帮忙看看
#include <stdio.h>
main()
{
 int i,a[12],t,k,m;
  for(i=0;i<11;i++)
   {
    a[i]=0;
    for(i=1;i<11;i++)
    scanf("%d",&a[i]);
     for(k=1;k<11;k++)
     for(i=k+1;i<11;i++)
     while(a[i-1]>a[i])
     {
      t=a[i-1];
      a[i-1]=a[i];
      a[i]=t;
     }
    for(i=1;i<11;i++)
    printf("%d  ",a[i]);
   }
   printf("\nplease input a number\n");
   scanf("%d",&m);
   for(i=1;i<11;i++)
     if(a[i]>m)
     break;
    for(k<=11;k>i;k--)
     a[k]=a[k-1];
     a[i]=m;
     for(i=1;i<=11;i++)
     printf("%d  ",a[i]);
}
搜索更多相关主题的帖子: include number 
2016-12-21 19:28
搬砖
Rank: 2
等 级:论坛游民
帖 子:68
专家分:37
注 册:2016-10-13
得分:0 
回复 楼主 shanji1201
先输入,再排序,再做比较,这样你思路会清晰些
2016-12-21 19:37
shanji1201
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-12-16
得分:0 
回复 2楼 搬砖
具体一点啊
2016-12-21 23:07
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
while(a[i-1]>a[i])
     {
      t=a[i-1];
      a[i-1]=a[i];
      a[i]=t;
     }

这个问题应该把while改为if~虽然影响不大,但规范一下还是好的~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-22 10:40
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:18 
回复 楼主 shanji1201
写个插入排序的来看看~

程序代码:
#include <stdio.h>
int main()
{
    int i,j,t,k,m;
    int a[11]={0};

    for (i=0;i<10;i++)
        scanf("%d",&a[i]);

    printf("\nplease input a number\n");
    scanf("%d",&m);

    for (i=0;i<10;i++)
        for (j=0;j<9-i;j++)
            if (a[j]>a[j+1])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }

    for (i=9;i>-1&&a[i]>m;i--)
            a[i+1]=a[i];

    a[i+1]=m;

    for (i=0;i<11;i++)
        printf("%3d",a[i]);

    printf("\n");

    return 0;
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-22 11:05
hxwj
Rank: 2
等 级:论坛游民
帖 子:74
专家分:34
注 册:2016-12-8
得分:2 
应该先将数组排序,然后再插入这个数x。如果是升(降)序,找出>=(<=)的这个数的序号i,将这个数组的a[i],a[i+1]……至a[n]全部后移一组a[i+1],a[i+2]……a[n+1]
再执行a[i]=x,如果用链表做,更简单!
2016-12-22 11:51
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 6楼 hxwj
以下是引用hxwj在2016-12-22 11:51:37的发言:

如果用链表做,更简单!


不一定哦,要视具体情况而言,如果结构体里面成员较多,逐个逐个结构体成员交换效率就会降低(因为不是线性表,因此不能直接整体交换),这样就要交换节点,这个比较复杂~不过对于单个结构成员单纯排大小只需交换一个结构体成员的值即可,无需交换链表指针~这样交换的速度是很快的,单个插入就行了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-22 12:05
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 6楼 hxwj
对哦,再次补充一下:针对本题而言,用链表插入和5楼的执行效率快不了太多,如果想体现出链表优势,应该进行二分法查找~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-22 13:05
shanji1201
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-12-16
得分:0 
回复 6楼 hxwj
似乎比较容易理解
2016-12-22 22:59
shanji1201
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-12-16
得分:0 
回复 5楼 九转星河
这方法简单啊,厉害!
2016-12-22 23:00



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




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

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