在这种情况下,最好的排序算法是什么?

时间:2012-01-20 22:56:13

标签: c++ sorting

myarray = empty
n = 10000
range = 1000
loop 1 to n {
    x = random number between 1 and range 
    if x not in myarray {
        add x to myarray
        sort myarray
        do something 
    }
}

我考虑过插入排序,但这需要元素转移。并且快速排序在已经排序的列表上会很糟糕。我能想到的最好的是Min Heap。是否有一些鲜为人知的排序算法对这种情况更好?它是在C ++的STL中吗?

3 个答案:

答案 0 :(得分:9)

您正在寻找std::set。它会在您插入时对事物进行排序,并为您提供快速“不在”操作。

答案 1 :(得分:3)

最佳选择,当您知道要排序的数字始终位于0max_value之间时Counting sort,且无法超越复杂性:O(n)

答案 2 :(得分:2)

最好的选择是根本不对数组进行排序,然后等到排序之前结束。在数组中重复排序将是昂贵的,因为您必须通过一种方式或另一种方式移动元素。

由于您对操作感兴趣

  • 插入元素
  • 检查元素是否存在
  • 维护已排序的订单

您应该考虑查看与数组不同的结构,可能是二叉搜索树,它支持快速(O(log n))插入,并可用于检索已排序的顺序。

希望这有帮助!