首页 文章

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

提问于
浏览
10

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

3 回答

  • 0

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

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

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

  • 24

    你问题的答案就在你的问题中 .

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

    执行二进制搜索的第二部分是在'Sorted list'上完成的 . 二进制搜索的复杂性是 o(log n) . 因此,该计划的复杂性最终仍然是 o(n*log n) .

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

  • 2

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

相关问题