13

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

这适用于小编号,但是当数组包含 10^10 的序数时,它会给出错误的结果吗?

我在犯什么错误?

4

3 回答 3

16

函数的结果compare必须是int。两个的减法long long很容易溢出int类型(在你的情况下确实如此)。

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

于 2013-07-14T10:23:43.400 回答
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;
}
于 2014-10-17T15:10:17.087 回答
-2
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/

于 2014-03-04T00:47:33.573 回答