首页 新闻 搜索 专区 学院

c++排序为什么第一组数据不行

0
[已解决问题] 解决于 2012-05-15 11:42
#include<iostream>
using namespace std;
template<typename T>
T max(T x,T y)
{
 return (x<y)?x:y;
}
int main()
{
 double a[3];
 while(cin>>a[0]>>a[1]>>a[2])
 {
  for(int i=1;i<3;i++)
   for(int j=0;j<=3-i;j++)
   {
    if(max(a[j],a[j+1])==a[j+1])
    {
     double t;
     t=a[j];
     a[j]=a[j+1];
     a[j+1]=t;
    }
   }
 
  for(i=0;i<3;i++)
  {
   cout<<a[i]<<" ";
  }
  cout<<endl;
 }
 return 0;
}
排序要求!!为什么用VC测试,第一组数据很奇怪!
要求
输入例子
Sample Input
3 2 1
5.4 8.5 2.3

 Sample Output

1 2 3
2.3 5.4 8.5
按从小到大排序
但是我第一组测试输入是
3 2 1
结果输出的是
1 2.04498e-307 2
第二组数据
3 2 1
结果是
1 2 3
求解释!!!
C++
blue fire的主页 blue fire | 菜鸟二级 | 园豆:211
提问于:2012-05-15 10:08
< >
分享
最佳答案
1

浮点数不是一种精确的表示形式,而且可能你这个排序有点问题,不明白为什么要返回大的值来进么对比呢?不能用bool IsMax()么?

奖励园豆:5
sinhbv | 老鸟四级 |园豆:2579 | 2012-05-15 11:08

我们老师叫我们用的函数模板,T max(T x,T y).于是在定义输入类型时我问老师,他就叫我用double.
{
 return (x<y)?x:y}中max 只是一个函数名,其实返回的是小的那个数

blue fire | 园豆:211 (菜鸟二级) | 2012-05-15 11:16

@blue fire: 我的意思是说返回值的问题,另外就是,找一冒泡排序的算法来对比着检查一下你的算法吧,可能是这里有问题。

sinhbv | 园豆:2579 (老鸟四级) | 2012-05-15 11:22

@sinhbv: 谢谢了,问题解决了

blue fire | 园豆:211 (菜鸟二级) | 2012-05-15 11:35
其他回答(2)
1

这个貌似按第一位顺序往后比较的,排序的要求是什么?

artwl | 园豆:16536 (专家六级) | 2012-05-15 10:10

谢谢!就是希望能是数组进行从小到大重新排列

支持(0) 反对(0) blue fire | 园豆:211 (菜鸟二级) | 2012-05-15 10:54
0
要求
Sample Input
3 2 15.4 8.5 2.3

Sample Output

1 2 32.3 5.4 8.5

这要求输出的数据这么这么奇怪,还是这是你输出的数据?
heqichang | 园豆:275 (菜鸟二级) | 2012-05-15 10:22

for(int j=0;j<=3-i;j++)
{
if(max(a[j],a[j+1])==a[j+1])

 

想想这里如果j=2的话?

支持(0) 反对(0) heqichang | 园豆:275 (菜鸟二级) | 2012-05-15 10:26

还是不行呀

支持(0) 反对(0) blue fire | 园豆:211 (菜鸟二级) | 2012-05-15 10:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册