我正在使用此比较函数对由long long int nos组成的数组进行排序。
int compare(const void * p1,const void * p2)
{
return (* (long long int * )a-*(long long int * )b);
}
qsort(array,no of elements,sizeof(long long int),compare)
这适用于小的nos但是当数组中包含10 ^ 10的nos时它会得到错误的结果吗?
我犯的错误是什么?
答案 0 :(得分:15)
compare
函数的结果必须为int
。两个long long
的减法很容易超出int
类型(在您的情况下也是如此)。
尝试显式比较这两个值并返回-1,0或1。
答案 1 :(得分:6)
显式返回-1,1或0.这是以下代码:
int cmpfunc (const void * a, const void * b)
{
if( *(long long int*)a - *(long long int*)b < 0 )
return -1;
if( *(long long int*)a - *(long long int*)b > 0 )
return 1;
return 0;
}
答案 2 :(得分:0)
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
qsort (values, 6, sizeof(int), compare);