二阶搜索未排序数组的时间复杂度

时间:2013-04-09 20:33:04

标签: arrays sorting binary-search

我被困两次复杂。使用有序数组进行二进制搜索是O(logN)。因此,要搜索未排序的数组,我们必须先对其进行排序,以便变为O(NlogN)。那么我们就可以执行二进制搜索,它给出的复杂度为O(N),但我已经读过它可能是O(NlogN)。哪个是对的?

3 个答案:

答案 0 :(得分:24)

二进制搜索用于“已排序”列表。复杂性为O(logn)。

二进制搜索不适用于“未排序”列表。对于这些列表,只需从第一个元素开始直接搜索;这给出了O(n)的复杂性。如果您使用MergeSort或任何其他O(nlogn)算法对数组进行排序,那么复杂性将为O(nlogn)。

O(logn)< O(n)< O(nlogn)

答案 1 :(得分:2)

你问题的答案就在你自己的问题中。

您首先对列表进行排序。如果使用快速排序或合并排序对列表进行排序,则复杂性将变为o(n*log n)。第一部分结束了。

执行二进制搜索的第二部分是在“已排序列表”上完成的。二进制搜索的复杂性为o(log n)。因此,该计划的复杂性最终仍为o(n*log n)

但是,如果您希望计算数组的中位数,则不必对列表进行排序。线性或顺序搜索的简单应用可以帮助您。

答案 2 :(得分:0)

线性搜索的时间复杂度为O(n),二进制搜索的时间复杂度为O(log n)(log base-2)。如果我们有一个未排序的数组并且想要使用二进制搜索,我们必须先对数组进行排序。在这里,我们必须花费一些时间O(n logn)对数组进行排序,然后花时间搜索元素。