使用qsort对长整型数组进行排序,在处理大数字时无法正常工作

13

我正在使用这个比较函数来对由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)

当数组包含大约10的10次方数量级时,这种方法对于小数字可以正常工作,但会得出错误的结果。

我犯了什么错误?

3个回答

17
< p > compare 函数的结果必须是 int 类型。两个 long long 相减可能会导致 int 类型的溢出(在您的情况下确实发生了)。

尝试明确比较这两个值并返回 -1、0 或 1。


7
明确地返回-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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接