杭电ACM 2071 下面是我的代码 用快排写的

#include<iostream>
#include<stdlib.h>
using namespace std;
int t,n,k=0;
double a[110];
double b[100];
int cmp(const void* _a,const void* _b)
{
return *(double*)_a>*(double*)_b?1:-1;
}
int main()
{
cin>>t;
while(t--)
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
qsort(a,n,sizeof(double),cmp);
for(i=1;i<=n;i++)
cout<<a[i]<<" ";//这行代码是检测排序后的数据
cout<<endl;
b[k]=a[n];
k++;
memset(a,0,n);//数组清0;
}
for(int j=0;j<k;j++)
cout<<b[j]<<endl;
return 0;
}
运行的时候出了点问题,当输入4 165 182 172 160的时候,输出的排序后的结果为165 172 182 160 最后一个160没有参与排序,实在是搞不清原因,望各位高手指教,谢谢!

#include<iostream>
#include<iomanip>
#include<stdlib.h>
using namespace std;
int t,n,k=0;
double a[110];
double b[100];
int cmp(const void* _a,const void* _b)
{
//return *(double*)_a>*(double*)_b?1:-1; 这样会有问题的
if(*(double*)_a > *(double*)_b) return 1;
else if(*(double*)_a < *(double*)_b) return -1;
else return 0;
}
int main()
{
cin>>t;
while(t--)
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
qsort(a+1,n,sizeof(double),cmp); // 同一楼,因为a+1是你要排序的第一个元素的地址
cout << fixed << setprecision(2) << a[n] << endl;
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-16
qsort(a+1,n,sizeof(double),cmp);追问

谢谢您的回答。。。可是请问这是为什么??为什么是a+1而不是a,谢谢0.0

追答

从a+1开始的

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网