如何解决二进制搜索-JS
我正在尝试在JS中编写一个二进制搜索函数,该函数在排序数组中查找“ 1”的第一个匹配项。 但是我不明白为什么使用while循环时会陷入无限循环(浏览器崩溃)的原因。
这是我到目前为止编写的代码
const arr = [0,1,1];
function findTheOne(arr_start,arr_end,arr) {
let mid = ((arr_start + arr_end)) / 2
mid = Math.ceil(mid);
while (arr_start <= arr_end) {
if (arr[mid] == 1 && (mid == 0 || arr[mid - 1] == 0)) {
return mid;
} else if (arr[mid] == 1) {
arr_end = mid - 1;
console.log(arr_end);
} else {
arr_start = mid + 1;
}
}
}
console.log(findTheOne(0,arr.length - 1,arr));
解决方法
在while循环中,您永远不会更新mid的值 您只需将您的中间代码移入while循环内即可。
const arr = [0,1,1];
function findTheOne(arr_start,arr_end,arr) {
while (arr_start <= arr_end) {
let mid = ((arr_start + arr_end)) / 2
mid = Math.ceil(mid);
if (arr[mid] == 1 && (mid == 0 || arr[mid - 1] == 0)) {
return mid;
} else if (arr[mid] == 1) {
arr_end = mid - 1;
console.log(arr_end);
} else {
arr_start = mid + 1;
}
}
}
console.log(findTheOne(0,arr.length - 1,arr));
,
您需要在循环内更新mid
的值。如果将函数的前两行移动到循环的开始,则代码应该可以工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。