主题:sort()和qsort()的一些疑问
题目来自杭电的oj题,题号2020;参见这个网页http://acm.hdu.edu.cn/showproblem.php?pid=2020
我的代码如下
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<math.h>
using namespace std;
int cmp(const int &a,const int &b)
{
return abs(b)-abs(a);
}
int main()
{
int n,arr[100],i;
while(scanf("%d",&n),n)
{
getchar();
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
//qsort(arr,n,sizeof(int),cmp);
[b]sort(arr,arr+n,cmp);[/b]
for(i=0;i<n;i++)
{
printf("%d%c",arr[i],n-i-1?' ':'\n');
}
}
return 0;
}
得不到测试数据的结果,而且发现似乎实现的功能是逆序输出,请问各位大牛这是什么原因呢?
另外,看到网上的一个解法是用.c写的,gcc编译
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int cmp(const int *a, const int *b)
{
return abs(*b) - abs(*a);
}
int main(void)
{
int n, i, x[101];
while (scanf("%d", &n), n)
{
for (i = 0 ; i < n ; i++)
scanf("%d", x + i);
[b]qsort(x, n, sizeof(int), cmp);[/b]
for (i = 0 ; i < n ; i++)
printf("%d%c", x[i], (i != n - 1 ? ' ' : '\n'));
}
return 0;
}
但是如果用g++编译会报错,出错信息为invalid conversion from `int (*)(const int*, const int*)' to `int (*)(const void*, const void*)'
请问这是为什么呢?
我的代码如下
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<math.h>
using namespace std;
int cmp(const int &a,const int &b)
{
return abs(b)-abs(a);
}
int main()
{
int n,arr[100],i;
while(scanf("%d",&n),n)
{
getchar();
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
//qsort(arr,n,sizeof(int),cmp);
[b]sort(arr,arr+n,cmp);[/b]
for(i=0;i<n;i++)
{
printf("%d%c",arr[i],n-i-1?' ':'\n');
}
}
return 0;
}
得不到测试数据的结果,而且发现似乎实现的功能是逆序输出,请问各位大牛这是什么原因呢?
另外,看到网上的一个解法是用.c写的,gcc编译
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int cmp(const int *a, const int *b)
{
return abs(*b) - abs(*a);
}
int main(void)
{
int n, i, x[101];
while (scanf("%d", &n), n)
{
for (i = 0 ; i < n ; i++)
scanf("%d", x + i);
[b]qsort(x, n, sizeof(int), cmp);[/b]
for (i = 0 ; i < n ; i++)
printf("%d%c", x[i], (i != n - 1 ? ' ' : '\n'));
}
return 0;
}
但是如果用g++编译会报错,出错信息为invalid conversion from `int (*)(const int*, const int*)' to `int (*)(const void*, const void*)'
请问这是为什么呢?