这个二进制搜索算法会遇到无限循环吗?

时间:2017-10-13 14:30:09

标签: algorithm

具体的二进制搜索实现如下所示。我想问的问题是算法是否可能遇到无限循环?

我能想到的一种可能情况是当l == r == UINT_MAX且目标x大于数组中的所有元素时。在这种情况下,算法会陷入无限循环吗?

是否有其他情况遇到无限循环?

感谢您的帮助!!!

// A iterative binary search function. It returns location of x in
// given array arr[l..r] if present, otherwise -1.
int binarySearch(vector<double> arr, double x) {
    unsigned int l = 0;
    unsigned int r = arr.size() - 1;
    while (l <= r) {
      int m = l + (r - l) / 2;
      if (arr[m] == x) 
          return m;  
      if (arr[m] < x) 
          l = m + 1; 
      else
          r = m - 1; 
    }
    return -1; 
}

1 个答案:

答案 0 :(得分:0)

不,它没有!如果l和r可能永远保持相同的值,则此处仅发生无限循环。要做到这一点,需要做以下事情之一:

1)新值l =旧值l:

m + 1 = l + (r - l) / 2 + 1 = l --> (r - l)/2 + 1 = 0(从未发生,因为左侧总是正面知道r已经大于等于l)

2)r的新值r = r的旧值:

m - 1 = l + (r - l) / 2 - 1 = r --> (r - l)/2 = r - l + 1(这也不会发生,因为右侧总是严格地更大)