(查找的数组为有序数组,本文为升序数组)
二分查找法的思路分析:
- 首先确定该数组的中间的下标 mid=(left+right)/2 js代码下需要加上Math.floor(),否则会除法得出小数结果
- 让需要查找的数 target 和 arr[mid] 比较
- target==arr[mid],说明找到,就返回
- target>arr[mid],说明要查找的数在 mid 的右边,因此需要向右查找 left=mid+1
- target<arr[mid],说明要查找的数在 mid 的左边,因此需要向左查找 right=mid-1
那么什么时候结束循环呢?
- 找到就结束循环
- 当 left>right 就需要退出循环
var arr = new Array(1,8,10,89,100,123);
var target = 8;
var index = binary(arr,target);
console.log(index);
function binary(arr,target){
var left = 0;
var right = arr.length-1;
while(left<=right){
let mid = Math.floor((left+right)/2);//js除法会等于小数
if(target == arr[mid]){
return mid;
} else if(target>arr[mid]){
left = mid + 1;
} else{
right = mid - 1;
}
}
return -1;
}
本文为算法笔记,需要详细视频学习请点击以下链接