| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1132 人关注过本帖
标题:关于数组的一个大小排序,插入一个数据后,排序出错
只看楼主 加入收藏
aglence
Rank: 1
等 级:新手上路
帖 子:63
专家分:2
注 册:2012-7-6
结帖率:92.31%
收藏
已结贴  问题点数:20 回复次数:8 
关于数组的一个大小排序,插入一个数据后,排序出错
程序代码:
#include<stdio.h>
#include<math.h>

int main(void)
{
    int i,j,p,q,s,n,m,a[10];
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0;i<10;i++)
    {
        p=i;
        q=a[i];
        for(j=i+1;j<10;j++)
        {
            if(q<a[j])
            {
                p=j;
                q=a[j];
            }
        }
        s=a[i];
        a[i]=a[p];
        a[p]=s;    
        printf("%d\t",a[i]);
    }
    printf("\n");
    scanf("%d",&n);
    for(i=0;i<10;i++)
    {
        if(n>a[i])
        {
            for(m=9;m>=i;m--)
            {
                a[m+1]=a[m];/*从a[9]开始一直到a[i]位的数据整体向后平移一位*/
            }
            a[i]=n;  /*第i位空出来用n补充,由于数据从大到小排列,故不再循环,跳出*/
            break;
        }
        else if(i==9)
            a[i+1]=n;/*如果n比所有a[i]小,则放在i+1位*/
    }
    for(i=0;i<=10;i++)
    {
        printf("%d\t",a[i]);
    }
    return 0;
}





代码如上,求大侠检查。
图片附件: 游客没有浏览图片的权限,请 登录注册
,结果如上,按结果所示,似乎是数据并没有后移一位,第i位的数据直接被n替换了(a[i]=n)
2013-05-17 01:50
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:4 
for(m=9;m>=i;m--)
             {
                 a[m+1]=a[m];
问题就是这个了,首先思路是对的,但是数组越界了,m=9,那么a[m+1]肯定不对了,数组的大小没有a[10]

Maybe
2013-05-17 09:50
wangzhili
Rank: 1
等 级:新手上路
帖 子:13
专家分:6
注 册:2013-5-16
收藏
得分:4 
这个算法运行时间复杂度O(n^3),能不能找到更好的算法,优化下程序。
2013-05-17 10:04
wangzhili
Rank: 1
等 级:新手上路
帖 子:13
专家分:6
注 册:2013-5-16
收藏
得分:0 
对于“for(m=9;m>=i;m--)
             {
                 a[m+1]=a[m];
问题就是这个了,首先思路是对的,但是数组越界了,m=9,那么a[m+1]肯定不对了,数组的大小没有a[10]”
这个问题你可以重新定义个数组b[11],然后a[m]=b[m+1];
左后打印  for(i=0;i<=10;i++)
    {
        printf("%d\t",b[i]);
    }
2013-05-17 10:11
wangzhili
Rank: 1
等 级:新手上路
帖 子:13
专家分:6
注 册:2013-5-16
收藏
得分:0 
b[m+1]=a[m];打反了
2013-05-17 10:18
屠神
Rank: 2
等 级:论坛游民
帖 子:17
专家分:36
注 册:2013-3-19
收藏
得分:4 
类似冒泡法!!前后两两数比较,确定大数在前还是小数在前
2013-05-17 10:45
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
收藏
得分:4 
(1)int a[10];数组定义少了1个元素,10个元素插入1个元素之后变为11个元素,所以数组至少有11个元素
(2)在数组中插入n,也可以写成这样:
    i=9;
    while(n>a[i] && i>=0)
    {
       a[i+1]=a[i];
       i--;
    }
    a[i+1]=n;
简单也比较容易理解
2013-05-17 20:39
我叫沃恩
Rank: 12Rank: 12Rank: 12
来 自:Asia
等 级:贵宾
威 望:10
帖 子:1234
专家分:3865
注 册:2013-3-29
收藏
得分:4 
同意2楼!

因为我是菜鸟,所以应该被骂! 细节+坚持=成功!
2013-05-17 21:27
aglence
Rank: 1
等 级:新手上路
帖 子:63
专家分:2
注 册:2012-7-6
收藏
得分:0 
回复 4楼 wangzhili
试下这个解决方案......
2013-05-17 22:25
快速回复:关于数组的一个大小排序,插入一个数据后,排序出错
数据加载中...
 
   



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

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