增强的二进制搜索

时间:2016-07-13 05:24:47

标签: binary-search

我正在做面试准备问题,并遇到了这个问题:搜索已排序和旋转的数组中的元素。

对我来说最明显的解决方案是 1)找到枢轴点(数字大于下一个数字), 2)将其用作划分点以知道旋转和排序数组的哪一半执行二进制搜索。

我发现了一个“更好”(或者他们在怪人中声称极客)的解决方案。为了不让你厌烦代码,这里是高层次的想法。我的问题是:我不明白如何找到中间点让我们只在一次通过中搜索。这真的比我提出的初始解决方案更好吗?

高水平的“改进/更好”方法:

1) Find middle point mid = (l + h)/2
2) If key is present at middle point, return mid.
3) Else If arr[l..mid] is sorted
    a) If key to be searched lies in range from arr[l]
       to arr[mid], recur for arr[l..mid].
    b) Else recur for arr[mid+1..r]
4) Else (arr[mid+1..r] must be sorted)
    a) If key to be searched lies in range from arr[mid+1]
       to arr[r], recur for arr[mid+1..r].
    b) Else recur for arr[l..mid] 

1 个答案:

答案 0 :(得分:0)

您的第1步要求您找到枢轴点。要做到这一点,需要搜索。该解决方案结合了对枢轴点的二进制搜索和对目标的二进制搜索;你的解决方案没有。