作为遗传学习算法实验的一部分,能够将整个“基因”数组分类为适应度顺序是有用的。到目前为止,我在社区中找到的唯一答案是处理最高值或第二高值等等。
有没有人开发出一种可以用C ++实现的健壮的数组排序方法?似乎很多实现都涉及(int i:array)方法,这种方法并不是所有C ++平台都普遍接受的。
如果有任何帮助,我将不胜感激。
答案 0 :(得分:9)
为什么不使用std::sort
中定义的<algorithm>
?见here。您还可以定义自定义比较器。
示例用法如下
std::sort(someArray,someArray+lengthOfArray);
std::sort(someVector.begin(),someVector.end());
如果您需要, stable_sort
也存在。
如果fit不是直接<
运算符(例如涉及某些模拟),则自定义比较器可能很有用。然后你可以做这样的事情
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);
此外,您可能不需要 来对整个数组进行排序。例如,如果100个基因中只有20个在时间步长中存活,那么您只需要前20个值。在这种情况下,std::partial_sort
是您的朋友。更多信息here。