2014-10-03 58 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

相关问题