作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
具体的二分查找实现如下图。我想问的问题是算法有没有可能死循环?
我能想到的一种可能情况是 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;
}
最佳答案
不,它没有!如果 l 和 r 可能永远保持在相同的值,那么这里只会发生无限循环。为此,需要发生以下情况之一:
1) l 的新值 = l 的旧值:
m + 1 = l + (r - l)/2 + 1 = l --> (r - l)/2 + 1 = 0
(这永远不会发生,因为左边是总是肯定知道 r 已经大于 l)
2) r 的新值 = r 的旧值:
m - 1 = l + (r - l)/2 - 1 = r --> (r - l)/2 = r - l + 1
(这也永远不会发生,因为右边总是更大)
关于algorithm - 这个二分查找算法会不会陷入死循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46732244/
我正在尝试编写一个程序,在名为 items 的数组中进行顺序搜索和二分搜索,该数组具有 10000 个已排序的随机 int 值。第二个名为 targets 的数组加载了 1000 个 int 值(50
当我尝试使用图表并为其编写一些代码但没有成功时,我遇到了一个问题:/!! 我想创建一些东西来获取图形数据并检查它是否:1- 连接2-二分法3-有循环4-是一棵树 所以我想知道,例如,是否可以将其写入以
我是一名优秀的程序员,十分优秀!