| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 388 人关注过本帖
标题:求教排序问题的思路解析
只看楼主 加入收藏
Velunce
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2013-1-10
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
求教排序问题的思路解析
1、直接交换数据
   Exp:  
程序代码:
main()
{

 int a,b,c,t;

 scanf("%d,%d,%d",&a,&b,&c);

 if(a>b){t=a;a=b;b=t;}

 if(a>c){t=a;a=c;c=t;}

 if(b>c){t=b;b=c;c=t;}

 printf("%d,%d,%d",a,b,c);
}
2、通过交换两数据的地址
  Exp:
程序代码:
main()
{
int a,b,c,*p,*p1,*p2,*p3;
scanf("%d,%d,%d",&a,&b,&c);
p1=&a;p2=&b;p3=&c;
if(a>b){p=p1;p1=p2;p2=p;}
if(a>c){p=p1;p1=p3;p3=p;}
if(b>c){p=p2;p2=p3;p3=p;}
printf("%d,%d,%d",*p1,*p2,*p3);
}
希望各位前辈指导下思路,小弟实在是想不通如何实现大小比较的。
2013-02-11 23:38
心灯甚亮
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:441
专家分:996
注 册:2013-1-29
收藏
得分:3 
两个程序本质相同
给你三个数,先比较第一个,第二个,把较大的放在第一个,较小的放在第二个,再比较第一个和第三个,再比较第二个和第三个,最后按次序输出。这种方法适合于少量数据,稍作改动就能变成微缩的冒泡排序法
a,c
b,c
a,b
次序而已
2013-02-11 23:42
boqiang
Rank: 2
等 级:论坛游民
帖 子:9
专家分:12
注 册:2013-1-17
收藏
得分:3 

纠正一下:
首先对三个数从小到大进行排序,需要先比较,再排序。
一般都是从第一个数开始比较,与另外两个数进行比较,如果第一个数大,那么就与比较的数交换位置;如果小,就不交换
然后依此类推,对另外两种情况进行两两比较。。。
还有,在交换的时候还要一个中间变量,用来暂存一个量,实现两个数的交换
你写的两种方法都可行,第一个是简单的变量值的交换,第二个是地址值的交换
最后,祝你新年快乐,学业有成!
2013-02-12 16:43
永远是起点
Rank: 1
等 级:新手上路
帖 子:26
专家分:3
注 册:2013-2-11
收藏
得分:3 
就像有一杯可乐和一杯雪碧,现在要将两杯饮料互换,就要再拿一个空杯子,可乐到“空杯”,雪碧到可乐那个杯子,再将“空杯”中的可乐到雪碧的杯子。               比较大小排序也用到这种思想。  
2013-02-12 17:34
tompobing
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:260
专家分:809
注 册:2012-12-9
收藏
得分:1 
按顺序让每一个数和后面所有的数字比较
2013-02-14 14:10
快速回复:求教排序问题的思路解析
数据加载中...
 
   



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

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