具体的二进制搜索实现如下所示。我想问的问题是算法是否可能遇到无限循环?
我能想到的一种可能情况是当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;
}
答案 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
(这也不会发生,因为右侧总是严格地更大)