| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1088 人关注过本帖
标题:插入排序
只看楼主 加入收藏
lyjf110
Rank: 2
来 自:那梭
等 级:论坛游民
帖 子:83
专家分:16
注 册:2009-4-16
结帖率:96.3%
收藏
已结贴  问题点数:20 回复次数:10 
插入排序
#include<stdio.h>
#define MAX 20

int asc(int a[],int length)
{
    int i,j,t;
    for(i=0;i<length;i++)
    {
        for(j=i;j<length;j++)
            if(a[i]>a[j])
        {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
        }
    }
}

void main(){
    int a[MAX];
    int n,i,j,m;
    printf("请输入数组的个数:");
    scanf("%d",&n);
    printf("请输入数组的各个元素值:\n");
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    asc(a,n);
    for(i=0;i<n;i++)
    {
        printf("%d  ",a[i]);
    }
    printf("\n请输入要插入的数:");
    scanf("%d",&m);
    while(a[i-1]>m)
    {
        a[i]=a[-1];
        a[i-1]=m;
    }

    for(i=0;i<n+1;i++)
        printf("%d",&a[i]);
    printf("\n");
}


红色的那段代码出问题了,帮忙改改吧。
新建 Microsoft Word 文档 (2).rar (12.01 KB)


[ 本帖最后由 lyjf110 于 2009-11-7 16:17 编辑 ]
搜索更多相关主题的帖子: include 怀化 
2009-11-07 16:11
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:5 
#include<stdio.h>
#define MAX 20
int asc(int a[],int length)
{
    int i,j,t;
    for(i=0;i<length;i++)
    {
        for(j=i;j<length;j++)
            if(a[i]>a[j])
        {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
        }
    }
}

void main()
{
    int a[MAX];
    int n,i,j,m,p ;
    printf("请输入数组的个数:");
    scanf("%d",&n);
    printf("请输入数组的各个元素值:\n");
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    asc(a,n);
    for(i=0;i<n;i++)
    {
        printf("%d  ",a[i]);
    }
    printf("\n请输入要插入的数:");
    scanf("%d",&m);
  for(i=0;i<n;i++)
    {
     if(a[i]>m)
     {
        for(p=n-1;p>=i;p--)
        a[p+1]=a[p];
        a[i]=m;
        break;
     }
    }

    for(i=0;i<n+1;i++)
        printf("%d",a[i]);
    printf("\n");
}
2009-11-07 16:32
lyjf110
Rank: 2
来 自:那梭
等 级:论坛游民
帖 子:83
专家分:16
注 册:2009-4-16
收藏
得分:0 
有几个地方不明白,想问一下
 if(a[i]>m)
     {
        for(p=n-1;p>=i;p--)
        a[p+1]=a[p];
        a[i]=m;
        break;
这里用了个 break,为什么,那样循环不会在第一次就停止吗?
还有,可不可以用while循环啊,该怎么用?
对了,还有,数组已经在输入的时候就排好序了,为什么还用嵌套循环啊?用单层循环不就够了吗?
请解答我的疑问谢谢!
2009-11-08 11:40
xuru1990
Rank: 2
等 级:论坛游民
帖 子:36
专家分:23
注 册:2009-10-28
收藏
得分:6 

  while(a[i-1]>m)
    {
        a[i]=a[-1];
        a[i-1]=m;
    }//


while(a[i-1]>m)
a[i-1]=a[i];
a[i]=m;//对你上面的程序改的


你多了一对大{},先把大于M的数向后移,移完了,再赋值!!!!

2009-11-08 12:33
zhou1818hu
Rank: 1
等 级:新手上路
帖 子:5
专家分:7
注 册:2009-10-29
收藏
得分:0 
你这应该不是插入排序……应该是把一个数插入到有序的序列中吧!
while(a[i-1]>m)
    {
        a[i]=a[-1];
        a[i-1]=m;
    }

这个地方应该是:
i=n-1;
while(a[i]>m)
    {
        a[i+1]=a[i];
        i--;
    }
    a[i+1]=m;
另外
for(i=0;i<n+1;i++)
        printf("%d",&a[i]);
这句中多了“&”,应该没有的!

[ 本帖最后由 zhou1818hu 于 2009-11-8 13:27 编辑 ]
2009-11-08 13:26
lyjf110
Rank: 2
来 自:那梭
等 级:论坛游民
帖 子:83
专家分:16
注 册:2009-4-16
收藏
得分:0 
我按上面的方法改过了,还是不行啊。
2009-11-08 20:57
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:2 
你输入的数不一定是按照想要的顺序输入的,可能随便输的几个数,那么先用两个for循环对输入的数进行排序。
而break出现在if语句里面。你的数组已经排好序了,要插入的数也就只有一个,那么它只可能插入到某一位置,不会到好几个位置。所以当找到了相应的位置后,先使从此开始的元素后移以为,然后将要插入的数放在该位置。到此数已经排好了,就不需要继续循环了。
2009-11-08 21:06
zhou1818hu
Rank: 1
等 级:新手上路
帖 子:5
专家分:7
注 册:2009-10-29
收藏
得分:7 
程序代码:
#include<stdio.h>
#define MAX 20

int asc(int a[],int length)
{
    int i,j,t;
    for(i=0;i<length;i++)
    {
        for(j=i;j<length;j++)
            if(a[i]>a[j])
        {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
        }
    }
}

 main(){
    int a[MAX];
    int n,i,j,m;
    printf("请输入数组的个数:");
    scanf("%d",&n);
    printf("请输入数组的各个元素值:\n");
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    asc(a,n);
    for(i=0;i<n;i++)
    {
        printf("%d  ",a[i]);
    }
    printf("\n请输入要插入的数:");
    scanf("%d",&m);
    i=n-1;
    while(a[i]>m)
    {
        a[i+1]=a[i];
        i--;
    }
    a[i+1]=m;

    for(i=0;i<n+1;i++)
        printf("%d",a[i]);
    printf("\n");
}

我晕,不就是这样吗?很简单的……

[ 本帖最后由 zhou1818hu 于 2009-11-9 12:44 编辑 ]
2009-11-09 12:42
lyjf110
Rank: 2
来 自:那梭
等 级:论坛游民
帖 子:83
专家分:16
注 册:2009-4-16
收藏
得分:0 
回复 7楼 m456m654
我输入的数已经在输入以后就排好序了,所以插入的数字只要从后面向前面比较就行了啊。
2009-11-09 13:19
lyjf110
Rank: 2
来 自:那梭
等 级:论坛游民
帖 子:83
专家分:16
注 册:2009-4-16
收藏
得分:0 
败给了一个很简单的问题,原来是在最后的输出结果里没有用空格把数字隔开,数字都连在一起了,看起来就像没得到想要的结果。
2009-11-09 13:26
快速回复:插入排序
数据加载中...
 
   



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

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