我被兩個時間的複雜性困住了。使用排序數組進行二分搜索是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. 雙向搜索的時間複雜度
- 11. 搜索多個排序數組及其複雜度
- 12. 遞增二進制計數器的時間複雜度?
- 13. 查找在以下數組中搜索的時間複雜度
- 14. 二叉搜索樹的時間複雜度
- 15. TreeMap - 搜索時間複雜度
- 16. 快速搜索時間複雜度?
- 17. 在排序數組中的二進制搜索
- 18. 排序數組中的遞歸二進制搜索C++
- 19. 排序數組的二進制搜索錯誤
- 20. 用於二進制搜索的排序數組
- 21. 二進制搜索在OCaml中排序的數組內
- 22. 搜索未排序數組
- 23. 合併排序的時間複雜度
- 24. Shell排序的時間複雜度?
- 25. 排序算法的時間複雜度
- 26. 使用具有重複項的排序數組的二進制搜索
- 27. 遞歸二進制搜索和排序
- 28. 二進制搜索升序排列C++
- 29. 二進制搜索和插入排序
- 30. 2^N數組插入排序的時間複雜度?
這些是兩個獨立的操作。無論如何,二分查找總是** O(log n)**。 – squiguy 2013-04-09 21:35:21
確實,二進制搜索不適用於未排序的數組;但是,您首先必須對數組進行排序以執行二分搜索。至少這是我最近學到的。 – user2373448 2017-11-21 21:16:36