我被两个时间的复杂性困住了。使用排序数组进行二分搜索是O(logN)。所以要搜索一个未排序的数组,我们必须首先对它进行排序,以便变成O(NlogN)。那么我们可以执行二进制搜索,其复杂度为O(N),但我已经读过它可能是O(NlogN)。哪个是对的?二进制搜索未排序数组的时间复杂度
9
A
回答
22
二进制搜索用于“排序”列表。复杂度是O(logn)。
二进制搜索不适用于“未排序”列表。对于这些列表,只需从第一个元素开始直接搜索;这给出了O(n)的复杂度。如果要使用MergeSort或任何其他O(nlogn)算法对数组进行排序,则复杂度将为O(nlogn)。
O(LOGN)< O(n)的< O(nlogn)
+0
即使数组有点小但未排序,BinarySearch仍然可以工作。好注意。 – ofarooq 2016-12-27 18:21:34
2
回答你的问题是你的问题本身。您首先对列表进行排序。如果使用快速排序或合并排序对列表进行排序,则复杂度将变为o(n log n)。第一部分结束。执行二进制搜索的第二部分是在“分类列表”上完成的。二进制搜索的复杂度是o(log n)。因此,最终程序的复杂性仍然是o(n日志n)n(n =)。但是,如果您想计算数组的中位数,则不必对列表进行排序。线性或顺序搜索的简单应用可以帮助您。
0
线性搜索的时间复杂度为O(n)
,二分查找的时间复杂度为O(log n)
(对数基数为2)。如果我们有一个未排序的数组,并且想要使用二进制搜索,我们必须首先对数组进行排序。在这里,我们必须花费时间O(n logn)
对数组进行排序,然后花时间搜索元素。
相关问题
- 1. 在二进制搜索中搜索排序数组的复杂度较低
- 2. 排序时间复杂度
- 3. 排序完成之前的二进制搜索的时间复杂度...请参阅
- 4. 二进制搜索按列排序的二维数组只搜索第一列
- 5. 双向搜索的时间复杂度
- 6. 搜索记录的时间复杂度?
- 7. 搜索多个排序数组及其复杂度
- 8. 二叉搜索树的时间复杂度
- 9. 快速搜索时间复杂度?
- 10. TreeMap - 搜索时间复杂度
- 11. 在排序数组中的二进制搜索
- 12. 搜索未排序数组
- 13. 排序算法的时间复杂度
- 14. 2^N数组插入排序的时间复杂度?
- 15. 二进制搜索升序排列C++
- 16. 使用二进制排序数组搜索
- 17. 如何使用二进制搜索查找排序数组中的重复项?
- 18. 二进制搜索的运行时间
- 19. 在对数时间在未排序的数组中搜索
- 20. 树排序:时间复杂度
- 21. 使用O(logN)中的HashMap在节点的链表上进行二进制搜索时间复杂度
- 22. 在未知大小的数组上进行二进制搜索
- 23. 数组函数的时间复杂度
- 24. 修改的二进制搜索数组
- 25. 二进制搜索树的高度在不变的时间
- 26. 对复杂PHP数组进行排序
- 27. 如何在降序排列的数组中进行二进制搜索?
- 28. 二进制搜索程序
- 29. 二进制搜索字符串数组
- 30. 在包含重复值的已排序和未排序数组中搜索和插入操作的时间复杂度
这些是两个独立的操作。无论如何,二分查找总是** O(log n)**。 – squiguy 2013-04-09 21:35:21
确实,二进制搜索不适用于未排序的数组;但是,您首先必须对数组进行排序以执行二分搜索。至少这是我最近学到的。 – user2373448 2017-11-21 21:16:36