13

この比較関数を使用して、long long int no で構成される配列をソートしています。

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。2 を減算すると、型long longが簡単にオーバーフローする可能性がintあります (この場合はそうです)。

2 つの値を明示的に比較して、-1、0、または 1 を返してみてください。

于 2013-07-14T10:23:43.400 に答える