2014-10-03 59 views
0

作爲遺傳學習算法實驗的一部分,能夠將整個「基因」排序爲適合順序是很有用的。到目前爲止,我能在社區中找到的唯一答案是處理最高或第二高的值等等。有沒有一種方法可以對C++中的整數數組進行排序

有沒有人開發出一個強大的數組排序方法,可以在C++中實現?看起來很多實現都涉及(int i:array)方法,它並不是所有C++平臺都普遍接受的。

我將不勝感激任何幫助。

+0

不知道你從結果得到了什麼,但一般重新排列排序在增加/減少爲了 – P0W 2014-10-03 08:58:11

+2

http://www.cplusplus.com/reference/cstdlib/qsort/ HTTP _all_的元素:// WWW .cplusplus.com/reference/algorithm/sort/ http://www.cplusplus.com/reference/algorithm/stable_sort/ ... 還有更多的在互聯網上 – yakoudbz 2014-10-03 08:58:30

+7

'std :: sort'也許? – 2014-10-03 08:58:50

回答

9

爲什麼不使用<algorithm>中定義的std::sort?見here。您也可以定義一個自定義比較器。

樣品用法如下

std::sort(someArray,someArray+lengthOfArray); 
std::sort(someVector.begin(),someVector.end()); 

stable_sort也存在,如果你需要它。

如果健身不是一個直線<運算符(例如涉及一些模擬),則自定義比較器可能很有用。然後,你可以做這樣的事情

struct { 
    bool operator()(gene a, gene b) 
    { 
     // However you compare genes for fitness. Not specific code, 
     // just an example. 
     a.simulateLife(); 
     b.simulateLife(); 
     return a.fitness < b.fitness; 
    } 
} geneCompare; 
std::sort(genes.begin(),genes.end(),geneCompare); 

另外,也許你不需要整個數組進行排序。例如,如果只有20個基因中的20個在時間步中存活,則只需要前20個值。在這種情況下std::partial_sort是你的朋友。更多信息here

+0

太好了,謝謝。我在各種算法教科書中遇到過這樣的問題,所以謝謝! – Adam893 2014-10-03 09:15:52

+1

自定義比較器有點懷疑。以這種方式評估健身可能會導致不敏感的結果。即基因a <基因b,基因b MSalters 2014-10-03 10:57:33

+0

對。但看到一個例子很有用。將更新比較器。 – rspencer 2014-10-03 12:21:58

相關問題