有没有办法在C ++中对ENTIRE数组进行排序

时间:2014-10-03 08:56:11

标签: c++ arrays sorting

作为遗传学习算法实验的一部分,能够将整个“基因”数组分类为适应度顺序是有用的。到目前为止,我在社区中找到的唯一答案是处理最高值或第二高值等等。

有没有人开发出一种可以用C ++实现的健壮的数组排序方法?似乎很多实现都涉及(int i:array)方法,这种方法并不是所有C ++平台都普遍接受的。

如果有任何帮助,我将不胜感激。

1 个答案:

答案 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