| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1019 人关注过本帖
标题:总是感觉自己做的是对的,可结果却不尽人意。大神们,求助!!!
只看楼主 加入收藏
qyl235532
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-4-23
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:11 
总是感觉自己做的是对的,可结果却不尽人意。大神们,求助!!!
对10个整数排序
#include<stdio.h>
int main()
{
int a[11],i,n,min;
    min;
   for(i=1;i<11;i++)
   {printf("a[%d]=",i);
    scanf("%d",&a[i]);
   }
   min=a[1];
for(n=1;n<=10;n++)
{
for(i=n;i<10;i++)
{
if(a[i]>a[i+1])
min=a[i+1];
}
a[n]=min;
printf("%5d",a[n]);
}
return 0;
}
2013-05-04 02:01
qyl235532
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-4-23
收藏
得分:0 
我的思路是每次比较(10-n+1)个数,取最小的赋给第a[n],然后顺次输出a[1],a[2],a[3]。。。
n从1到10
2013-05-04 02:04
qyl235532
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2013-4-23
收藏
得分:0 
就是从小到大排这10个数
2013-05-04 02:05
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:3 
从内循环看数组中的最小值一直在里面,并没有交换出来,所以每次只要是在n的范围内找的都是同一个数,看下插入排序。

www.qunxingw.wang
2013-05-04 06:57
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
收藏
得分:3 
楼主的程序代码不能完成排序,排序方法有很多,下面的算法我觉得比较容易理解(假设要对a[1],a[2],....a[10]升序排序):
对于a[1]~a[9]中的每个数a[i](i=1,2,3,4,5,6,7,8,9),执行(1),(2):
    (1)找出a[i]~a[10]中的最小数a[k]
     (2)a[i]与a[k]交换
对应的程序代码是:
for(i=1;i<10;i++)
{
   k=i;
   for(j=i;j<11;j++)
     if(a[j]<a[k])
         k=j;
   t=a[i];a[i]=a[k];a[k]=t;  /*a[i]与a[k]交换*/
}
或者:
for(i=1;i<10;i++)
{
   for(j=i;j<11;j++)
     if(a[j]<a[i])
     {                   /*a[i]与a[j]交换*/
        t=a[i];
        a[i]=a[j];
        a[j]=t;
     }
}
2013-05-04 08:13
曼陀罗的演绎
Rank: 1
等 级:新手上路
帖 子:16
专家分:6
注 册:2013-4-25
收藏
得分:3 
#include<stdio.h>
 int main()
 {
 int i,n,min;                /*赋初值    */  
  int a[10];
    for(i=0;i<10;i++)
     scanf("%d",&a[i]);      // 到此               
 for(n=0;n<9;n++)            // 冒泡比较
 for(i=0;i<9-n;i++)
 if(a[i]>a[i+1])
{
 min=a[i];
 a[i]=a[i+1];
 a[i+1]=min;
}                           //到此
for(i=0;i<10;i++)           //余下的是输出。
 printf("%d  ",a[i]);
 return 0;
 }
2013-05-04 09:27
凄月
Rank: 2
等 级:论坛游民
帖 子:10
专家分:20
注 册:2013-4-22
收藏
得分:3 
比较排序
#include <math.h>
void main()
{int i,j,t,a[10];
for(i=0;i<10;i++)
    scanf("%d",&a[i]);
 for(i=0;i<9;i++)
    for(j=i+1;j<10;j++)
        if(a[i]>a[j])
            {t=a[i];a[i]=a[j];a[j]=t;}
 for(i=0;i<10;i++)
    printf("%d ",a[i]);
 }
2013-05-04 13:47
弶儁
Rank: 2
来 自:安徽宣城
等 级:论坛游民
帖 子:16
专家分:23
注 册:2013-5-2
收藏
得分:3 
你的程序确实有问题。首先一个就是你应该在排序结束之后,再来打印出数据,你还没排玩就打印肯定是不对的。
还有一些你可以借鉴一下楼上的,他们的想法不错。
对了,提醒你一下,数组,你要弄10个数对吧?最好是用a[10],从a[0]开始到a[9]。最好不要用a[11],而从a[1]开始。
2013-05-05 09:12
陈宇水
Rank: 2
来 自:东莞
等 级:论坛游民
帖 子:29
专家分:34
注 册:2013-5-5
收藏
得分:3 
楼主,如果你想排序的话,其实你可有以用冒泡法。下面这个是由大到小排序。
#include<stdio.h>
main()
{
int i,j,t,a[10]={0,1,2,3,4,5,6,7,8,9};
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=0;i<10;i++)
printf("%d\t",a[i]);
return 0;
}

我是一个C语言初学者
2013-05-05 10:56
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:3 
min=a[1];
for(n=1;n<=10;n++)
{
    for(i=n;i<10;i++)
    {
       if(a[i]>a[i+1])
       min=a[i+1];
    }
   a[n]=min;
   printf("%5d",a[n]);
}问题所在,你的排序算法不对

Maybe
2013-05-05 11:00
快速回复:总是感觉自己做的是对的,可结果却不尽人意。大神们,求助!!!
数据加载中...
 
   



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

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