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中吗?
答案 0 :(得分:9)
您正在寻找std::set
。它会在您插入时对事物进行排序,并为您提供快速“不在”操作。
答案 1 :(得分:3)
最佳选择,当您知道要排序的数字始终位于0
和max_value
之间时Counting sort,且无法超越复杂性:O(n)
。
答案 2 :(得分:2)
最好的选择是根本不对数组进行排序,然后等到排序之前结束。在数组中重复排序将是昂贵的,因为您必须通过一种方式或另一种方式移动元素。
由于您对操作感兴趣
您应该考虑查看与数组不同的结构,可能是二叉搜索树,它支持快速(O(log n))插入,并可用于检索已排序的顺序。
希望这有帮助!