簡體   English   中英

使用qsort對long long int數組進行排序,不適用於大型nos

[英]using qsort to sort an array of long long int not working for large nos

我正在使用這個比較函數來排序一個由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)

這適用於小的nos但是當數組包含10 ^ 10的nos時它會得到錯誤的結果嗎?

我犯的錯是什么?

compare函數的結果必須是int 減去兩個long long很容易溢出int類型(在你的情況下也是如此)。

嘗試顯式比較這兩個值並返回-1,0或1。

顯式返回-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;
}
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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM