针对此特定用例的良好分类算法

时间:2018-12-27 20:35:39

标签: c++ sorting

struct Object {
    int16_t order = 0;
};

我有一个Object实例的std :: list,我想根据“ order”成员变量对其进行排序。

  • 较小的订单值在列表中放置较早。
  • 在循环时,如果当前订单值与现有订单值相同,我认为应该将其放置在现有订单值之前,这样我就不必继续查看列表的其余元素。
  • 该列表最多可包含1024个项目。

我正在寻找一种算法,该算法可以使列表以最少的迭代次数或类似的次数排序。我现在采用的一种幼稚方法导致三角形的迭代次数,对于1024是:     (1024(1024 + 1))/ 2 = 524,288

1 个答案:

答案 0 :(得分:1)

使用成员排序方法-std::list::sort和适当的比较器:

int main() {
    std::list<Object> objects{
        Object{4}, Object{2}, Object{6}, Object{7}, Object{42}
    };

    objects.sort([](const auto& lhs, const auto& rhs) {
        return lhs.order < rhs.order;
    });
}