2012-11-16 83 views
2

我用下面的代碼在std.vector(C++)添加隨機性快速排序上相等的元素

struct element { 
    int order; 
    int someValue; 
}; 

int comp(element a, element b) { 
    if (a.order < b.order) 
     return true; 
    return (rand() % 2) == 0; 
} 

vector.quickSort(comp); 

元素排序是這樣的代碼正確的,如果我想在添加元素的隨機性具有相同爲了

+0

向量沒有:這種情況下,我們可以通過這樣做,而不是其重點是特例,而不是和葉的另外兩起案件爲它們的默認行爲(檢查順序)解決這個問題quickSort成員函數 – billz

+0

@Mitch小麥假設元素的順序是遞減計數器,那麼我需要從該數組中隨機選取一個元素,它的計數器值爲零,然後將其重置爲給定值。如果我可以設法對陣列進行排序,那麼每次我需要選擇一個可以完成作業 – rraallvv

+0

@billz ups的元素時!我忘了提及我正在使用Bullet Physics的庫中的btAlignedObjectArray,它有一個快速排序方法 – rraallvv

回答

3

這是碼是否正確。

你應該寫一些測試數據來檢查。


如果你會寫一個測試,你會看到一些錯誤,並知道爲什麼,如果我們看一下

if (a.order < b.order) 
    return true; 
return (rand() % 2) == 0; 

你可以看到a.order > b.order情況下缺少這就是爲什麼它會不正確地進行工作

if (a.order == b.order) 
    return (rand() % 2) == 0; 
else 
    return a.order < b.order; 
+1

非常感謝,很有教育意義的答案 – rraallvv