为什么我的JavaScript二分查找while循环无法退出,会无限打印匹配索引?
死循环原因
核心问题是匹配到目标值后没有终止循环,也没有修改first/last的边界值:当array[midpoint] == value时,代码仅打印了索引,first和last始终满足first <= last的循环条件,每次计算的midpoint都是同一个固定值,程序会无限重复打印匹配结果,永远不会退出循环。
修复代码
如果需求是找到目标值索引后直接结束查找,在打印语句后添加break(终止循环)或return(结束函数)即可:
function binary_search(value, array){ var first = 0; var last = array.length - 1; while(first <= last){ var midpoint = Math.floor((first + last) / 2); if(array[midpoint] == value){ console.log(midpoint); break; // 找到后立即终止循环,解决死循环问题 // 如果需要返回索引可替换为 return midpoint; }else if(array[midpoint] < value){ first = midpoint + 1; }else{ // 无需额外判断大于,前两个条件已覆盖相等、小于的场景 last = midpoint - 1; } } }
内容的提问来源于stack exchange,提问作者Saani Info
相关产品推荐
相关产品推荐

