如何获得一个排序数组进行二分查找操作?

Posted

技术标签:

【中文标题】如何获得一个排序数组进行二分查找操作?【英文标题】:How to obtain a sorted array for binary search operation? 【发布时间】:2017-03-14 11:29:20 【问题描述】:

我最近学习了二进制搜索.... O(log n) 的时间复杂度给我留下了深刻的印象,但我怀疑要获得排序数组,我必须应用排序操作,即最小值O(nlogn) 复杂度要高得多。

【问题讨论】:

你有什么问题? 我怀疑.....首先要执行二进制搜索,我应该必须获得将采用 nlogn 的排序数组。因此,为了获得任何所需的数字,我可以通过线性搜索比 O(nlogn) 花费 O(n) 时间的数字来获得它 【参考方案1】:

如果您有一个未排序的列表(或不保证已排序),则线性搜索是可行的方法。线性搜索是 O(n),而排序是 O(nlog n),这更糟。即使检查列表是否已排序也是 O(n)。

如果您只想搜索一次列表,最好使用线性搜索。如果您要搜索多次,您可能会受益于首先对列表进行排序。为了找出最适合您的具体情况的方法,您必须分析问题。

【讨论】:

【参考方案2】:

这个想法是您对列表进行一次排序,并保留结果。随后的搜索是 O(log n)。因此,您在许多搜索中的复杂性是(n log n) + S*log(n),其中S 是您将进行的搜索次数。如果您不对数组进行排序,那么您的多次搜索费用为O(S*n)

【讨论】:

以上是关于如何获得一个排序数组进行二分查找操作?的主要内容,如果未能解决你的问题,请参考以下文章

数组中的二分查找

python常用的简单算法,二分查找冒泡排序数组翻转等

快速排序与二分查找

基本的查找算法

JAVA源码走读二分查找与Arrays类(未完)

算法二分法 ② ( 排序数组中查找目标值 | 二分法的经典写法 | 在排序数组中查找元素的最后一个位置 | 二分法的通用模板 )