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

SHB*_*SHB 12 c qsort

我正在使用这个比较函数来排序一个由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)
Run Code Online (Sandbox Code Playgroud)

这适用于小的nos但是当数组包含10 ^ 10的nos时它会得到错误的结果吗?

我犯的错是什么?

nul*_*ptr 15

compare功能的结果必须是int.减去两个long long很容易溢出int类型(在你的情况下它确实).

尝试显式比较这两个值并返回-1,0或1.


Lav*_*ari 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;
}
Run Code Online (Sandbox Code Playgroud)