排序一组数字的最快数据结构(和排序算法)是什么?

时间:2013-10-04 09:37:20

标签: c++ list sorting vector map

我需要一个数据结构,它可以容纳一组数字并尽快对它们进行排序。

我认为列表会很好,因为在列表中插入一个新数字比矢量更容易(这需要在插入后复制元素)。但是,遍历链表(我使用排序列表作为查找以从unordered_map中获取对象)可能会慢得多,因为内存分散在整个堆中。

我正在考虑使用地图,但由于不连续的性质,这也不会导致内存访问不良吗?

静态分配的数组(有很多空格)和快速排序算法是我想到的另一个想法......

回顾一下 - 我需要一个数据结构,它允许我插入新元素并尽快重新排序元素。元素将是数字。

感谢任何帮助?

5 个答案:

答案 0 :(得分:2)

最快的数据结构是阵列连续的内存区域,最适合缓存。

排序取决于。快速排序与插入排序的组合用于对低于特定大小的子阵列进行排序可能是您最好的选择,而不需要采用更深奥的东西。

答案 1 :(得分:0)

您可能想要考虑如何在vector / map存储这些对象。带有必要的比较函子的智能指针可能就是你想要的。

答案 2 :(得分:0)

如果通过“数字组”表示每个数字只出现一次,并且您希望它排序,请使用std :: set。老实说,除非你处理大量数据,否则std :: list甚至std :: vector都可能足够好。

答案 3 :(得分:0)

Boost.Containers库包含flat_set数据结构。它在std::set数据存储上实现std::vector接口。根据文档的优点

  • 比标准关联容器更快的查找
  • 比标准关联容器更快的迭代次数
  • 减少小对象(以及使用shrink_to_fit时的大对象)的内存消耗
  • 改进了缓存性能(数据存储在连续内存中)
  • 非稳定迭代器(插入和擦除元素时迭代器无效)
  • 无法存储不可复制和不可移动的值类型
  • 比标准关联容器更弱的异常安全性(复制/移动构造函数可以在删除和插入时移动值时抛出)
  • 比标准关联容器(特别是对于不可移动类型)更慢的插入和擦除

答案 4 :(得分:-1)

  

什么是最快的数据结构

数组。

  

(和排序算法)

Quicksort,只要您能够容忍最坏情况的行为。否则可能是heapsort。