首页 新闻 会员 周边

qsort排序不成功,求高人指点,下面是我的代码

0
悬赏园豆:5 [已解决问题] 解决于 2012-03-21 23:28

/*
 * Main1009.cpp
 *
 *  Created on: 2012-3-11
 *      Author: hxy
 */


#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;

 

struct s{
 double r;
 int a;
 int b;
}st[1005];

 

int cmp(const void *a, const void *b){
 if((*(s*)a).r > (*(s*)b).r)
  return -1;
 else if((*(s*)a).r < (*(s*)b).r)
  return 1;
 else
  return 0;
}

 

int main() {
 int m, n, i;
 double max;
 while (scanf("%d%d",&m,&n)) {
  max=0;
  for (i = 0; i < n; i++) {
   cin>>st[i].a>>st[i].b;
   st[i].r=(double)st[i].a/st[i].b;
  }

   qsort(st, n, sizeof(s[0]), cmp);

  for(i=0; i<n; i++){
   printf("%.4lf\t%d\t%d\n", st[i].r,st[i].a,st[i].b);
  }
  printf("---------\n");

 }

   return 0;
}

C++ C
warm3snow的主页 warm3snow | 菜鸟二级 | 园豆:391
提问于:2012-03-11 13:22
< >
分享
最佳答案
1

你com函数的问题,你应该返回一个BOOL类型的值,我不知道-1 怎么解释,你该成这样,如果程序没有其它问题,应该可以。

bool cmp(const void *a, const void *b){

  return (*(s*)a).r >(*(s*)b).r;
 }

收获园豆:3
风小手 | 菜鸟二级 |园豆:248 | 2012-03-11 22:17

小朋友,两个树比较大小,有三种结果,小于,大于,等于。所以不要那么写代码,也可以去看看

std::qsort的实现。

int cmp(const void *a, const void *b){

if( (*(s*)a).r< (*(s*)b.r).r ) return -1;
else if( (*(s*)a).r == (*(s*)b).r ) return 0;
else return 1;
}
zsounder | 园豆:2819 (老鸟四级) | 2012-03-31 01:53
其他回答(1)
0

qsort(st, n, sizeof(s[0]), cmp);  ——> qsort(st, n, sizeof(st[0]), cmp);

如果不是这个问题,难道是double精度的问题? double值,比较大小,一般不能直接比较的。

abs(double1-double2)<0.000001 means equal  

糖拌咸鱼 | 园豆:205 (菜鸟二级) | 2012-03-11 13:46

好像还是不行,不过还是谢谢你了。。

支持(0) 反对(0) warm3snow | 园豆:391 (菜鸟二级) | 2012-03-11 13:50

浮点类型不是不能直接比较,而是不能判定是否相等,判定大小是没有问题的。

支持(0) 反对(0) zsounder | 园豆:2819 (老鸟四级) | 2012-03-12 09:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册