2010-10-25 80 views
1

我想排序我通過qSort創建的結構,但它似乎是做我期望的結果。qsort不正確排序結構

這是我比較功能

int compare(const void *a, const void *b) { 
    const INPUT *p1 = a; 
    const INPUT *p2 = b; 
    return ((p1->startTime) - (p2->startTime)); 
} 

在哪裏輸入我的結構,開始時間是在它的int。

我這個

qsort(*global,fileNumber,sizeof(global)/fileNumber,compare); 

全球在哪裏輸入的變量名稱叫快速排序,fileNumber是許多條目是如何在全局變量中。

從我寫的printf語句看來,它什麼都不做。

我在我的代碼開始初始化的全局像這樣

INPUT *global[4]; 

對我做了什麼不對任何想法?

感謝

+0

「fileNumber」和「global」的定義是什麼?不確定,但它看起來像'global'是一個指針,所以'sizeof(global)'可能不是你所追求的,你可能不想在第一個參數中解引用它。 – torak 2010-10-25 13:43:52

+1

你的意思是* qsort系列中的全球?還是僅僅是全球?什麼是「全球」的類型? – 2010-10-25 13:44:30

+0

你是如何分配全球? – 2010-10-25 13:46:48

回答

2

當你發送*globalqsort,我可以想像,你定義global爲:

INPUT **global; 

因此,當你給sizeof(global)/fileNumber作爲第三個參數qsortsizeof大概是4(或8在64位系統上)。那麼這個論點可能是零。

因此qsort對零元素數組不做任何處理,也不會調用compare

1

global數組是一個指針數組,而不是一個INPUT結構數組。所以,你的比較功能應該是這個樣子:

int compare(const void *a, const void *b) { 
    const INPUT **p1 = a; 
    const INPUT **p2 = b; 
    return (((*p1)->startTime) - ((*p2)->startTime)); 
} 

而且您的來電qsort()

qsort(global,fileNumber,sizeof(global)/fileNumber,compare); 

當然,這一切都假定你真的使用global作爲指針數組,而不是一個指針到一組INPUT結構體。