快速排序后跟二分搜索比线性搜索更快吗?

时间:2010-07-04 20:00:26

标签: c++ c algorithm

排序二进制搜索或简单线性搜索是否更好?

由于

5 个答案:

答案 0 :(得分:23)

这取决于你想要在排序后搜索的频率 - 如果只有一次,那么线性搜索可能会更快。当然,更好的选择通常是(但并非总是如此)以使用集合或地图等方式按照排序顺序维护事物。

答案 1 :(得分:8)

不,因为快速排序比线性慢,而且你还要添加更多。

O(n*log(n)) + O(log(n)) = O(n*log(n)) > O(n)

编辑:指出不正确,因为快速排序的最坏情况甚至更慢,O(n ^ 2)。 n * log(n)是最好的情况和平均情况,它提供的下限已经慢于线性。正确的符号可能是Θ而不是O。

答案 2 :(得分:3)

线性搜索是O(n),排序是O(n log n),二进制搜索是O(log n)。因此,如果您希望搜索超过log n次,则排序更好。 (当然这只是理论上的表现,在练习中你也对常数感兴趣,尤其是对于不太大的n)。

答案 3 :(得分:3)

忘记二分之一搜索:

快速排序最佳案例:O(n log n)

快速排序最差情况:O(n^2)

线性搜索最坏情况:n

因此,无论您在快速排序后如何操作,如果您进行了线性搜索,您已经找到了该项目。但是,这仅适用于第一次搜索。假设您有多个搜索要做。如果您保留(快速)排序列表,则所有后续搜索的最差情况为O (log n),因此在多次搜索中(特别是在较大的数据集上),排序和搜索将是明智的。与一般的编程和软件设计一样,从来没有“一刀切”,所以考虑哪些模式和实现最适合您的特定领域。

答案 4 :(得分:0)

这取决于输入。对于少量元素,线性搜索通常更快。