You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于C语言二分搜索函数中while(low<=high)条件的疑问

二分搜索while (low <= high)循环终止逻辑解析

首先明确:二分搜索的前提是数组已经排序,low和high代表当前要搜索的子数组的左右边界索引。while (low <= high)的意思是:只要当前搜索区间里还有元素(哪怕只剩一个元素,即low=high时),就继续搜索;当low > high时,说明整个数组都搜完了,目标值不存在,循环终止。

下面用具体例子拆解low > high的触发场景:

场景1:目标值比数组所有元素都小

假设排序数组为[2,4,6,8,10],要查找的searchKey=1:

  • 初始状态:low=0,high=4(覆盖整个数组)
  • 第一次循环:计算middle=(0+4)/2=2,对应元素6比1大,所以调整右边界high=2-1=1
  • 第二次循环:low=0 <= high=1,计算middle=(0+1)/2=0,对应元素2还是比1大,调整右边界high=0-1=-1
  • 此时low=0,high=-1,0 > -1,循环终止,返回-1表示未找到目标。

场景2:目标值比数组所有元素都大

同样用数组[2,4,6,8,10],查找searchKey=11:

  • 初始状态:low=0,high=4
  • 第一次循环:middle=2,对应元素6比11小,调整左边界low=2+1=3
  • 第二次循环:low=3 <= high=4,middle=(3+4)/2=3,对应元素8比11小,调整左边界low=3+1=4
  • 第三次循环:low=4 <= high=4,middle=4,对应元素10比11小,调整左边界low=4+1=5
  • 此时low=5,high=4,5 > 4,循环终止,返回-1。

场景3:目标值在数组元素区间内但不存在

数组[2,4,6,8,10],查找searchKey=7:

  • 初始状态:low=0,high=4,middle=2,对应元素6比7小,调整左边界low=3
  • 第二次循环:low=3 <= high=4,middle=3,对应元素8比7大,调整右边界high=3-1=2
  • 此时low=3,high=2,3 > 2,循环终止,返回-1。

另外提个小细节:代码中返回-1但函数返回类型是size_t(无符号整数类型),这会导致-1被转换为一个极大的无符号值,实际使用时要注意这个类型不匹配的问题。

内容的提问来源于stack exchange,提问作者Jason Dube

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:10:27