[英]using qsort to sort an array of long long int not working for large nos
我正在使用这个比较函数来排序一个由long long int组成的数组。
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时它会得到错误的结果吗?
我犯的错是什么?
compare
函数的结果必须是int
。 减去两个long long
很容易溢出int
类型(在你的情况下也是如此)。
尝试显式比较这两个值并返回-1,0或1。
显式返回-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;
}
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
qsort (values, 6, sizeof(int), compare);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.