Arrays 未排序数组二进制搜索的时间复杂度

Arrays 未排序数组二进制搜索的时间复杂度,arrays,sorting,binary-search,Arrays,Sorting,Binary Search,我被两次的复杂性所困扰。使用排序数组进行二进制搜索的方法是O(logN)。因此,要搜索未排序的数组,我们必须首先对其进行排序,使其成为O(NlogN)。然后我们可以执行二进制搜索,它的复杂度为O(N),但我已经读到它可能是O(NlogN)。哪个是正确的?二进制搜索用于“排序”列表。复杂度为O(logn) 二进制搜索不适用于“未排序”列表。对于这些列表,只需从第一个元素开始直接搜索;这给出了O(n)的复杂性。如果要使用MergeSort或任何其他O(nlogn)算法对数组进行排序,那么复杂性将是O

我被两次的复杂性所困扰。使用排序数组进行二进制搜索的方法是O(logN)。因此,要搜索未排序的数组,我们必须首先对其进行排序,使其成为O(NlogN)。然后我们可以执行二进制搜索,它的复杂度为O(N),但我已经读到它可能是O(NlogN)。哪个是正确的?

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

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


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

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


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

线性搜索的时间复杂度是
O(n)
,二进制搜索的时间复杂度是
O(logn)
(logbase-2)。如果我们有一个未排序的数组,并且希望对此使用二进制搜索,那么必须首先对数组进行排序。在这里,我们必须花时间对数组进行排序,然后再花时间搜索元素。

的确,二进制搜索在未排序的数组上不起作用;但是,首先必须对数组进行排序以执行二进制搜索。至少这是我最近学到的东西。