使用qsort对long long int数组进行排序,不适用于大型nos

时间:2013-07-14 10:19:30

标签: c qsort

我正在使用此比较函数对由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时它会得到错误的结果吗?

我犯的错误是什么?

3 个答案:

答案 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);

http://www.cplusplus.com/reference/cstdlib/qsort/