- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
每当我迭代地执行二进制搜索时,我总是对是否应该使用 while (low < high)
感到困惑。或 while(low <= high)
.
虽然两者都可以,但有人能告诉我其中一个相对于另一个的实际优势是什么吗?
最佳答案
除了@templatetypedef 所说的之外,还有一点很重要,即当边界是包含 时,终止条件只能是low <= high
。 ,如果终止条件保持 low < high 它将导致在搜索中跳过 1 个元素。此外,当边界是排他性时,终止条件应该仅为 low < high
,如果条件为low <= high,会导致索引越界。
我会在这里用一个例子来解释它:
假设数组是 [4, 5, 6] 并且我们要搜索元素 6。这里的数组长度是 3。
初始化:我们设置 low = 0。我们可以设置 high = 2 或 high = 3。(即 Length -1 或 Length)
high
用长度初始化 - 1低 = 0,高 = 2
In first iteration
low = 0, high = 2 and middle = 1.
array[middle] is 5, so low = middle + 1 i.e. 2
在 if(low < high) 循环的第二次迭代中将终止而不搜索位置 2 处的元素,因此它应该是 if(low <= high)
In second iteration with if (low <= high)
low = 2, high = 2, middle = 2, array[middle] == x, so we return 2.
high
用长度初始化低 = 0,高 = 3
In first iteration
low = 0, high = 3 and middle = 1.
array[middle] is 5, so low = middle + 1 i.e. 2
In second iteration with if(low < high)
low = 2, high = 3, middle = 2. array[middle] == x, we return 2.
注意 条件不能是 low <= high 因为如果数组中不存在 x 它将导致循环在第二次迭代中运行 low = 3 和 high = 3 并且这将导致索引输出循环第三次运行时的界限。
关于algorithm - 二分查找终止条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35256433/
我正在尝试编写一个程序,在名为 items 的数组中进行顺序搜索和二分搜索,该数组具有 10000 个已排序的随机 int 值。第二个名为 targets 的数组加载了 1000 个 int 值(50
当我尝试使用图表并为其编写一些代码但没有成功时,我遇到了一个问题:/!! 我想创建一些东西来获取图形数据并检查它是否:1- 连接2-二分法3-有循环4-是一棵树 所以我想知道,例如,是否可以将其写入以
我是一名优秀的程序员,十分优秀!