二分查找也叫对折查找,对于一个从小到大的有序数组,想要在数组中找到某个值,依次对折查找,小于就在从左边开始,大于就从右边开始,再判断对折后当前的那个索引的值和需要查找的值对比,如果小则high-1,小则low+1,等于则结束返回结果,从而找到目标值。
1.非递归实现
//对于一个从小到大的有序数列,返回查找值的索引(数组下标) //二分查找,非递归方法 function BinSearch(arr, item){ var left = 0; var right = arr.length-1; while(left<=right){ var mid = Math.floor((left+right)/2); if(item == arr[mid]){ return mid; }else if(item > arr[mid]){ left = mid + 1; }else{ right = mid - 1; } } return false; } var arr=[-34, 1, 3, 4, 5, 8, 34, 45, 65, 87]; console.log(BinSearch(arr,5)); //4
2.递归实现
//二分查找,递归方法 function BinSearch2(arr,item,left,right){ var left = left || 0; var right = right || arr.length-1; var mid = Math.floor((left+right)/2); if(item == arr[mid]){ return mid; }else if(item > arr[mid]){ return BinSearch2(arr,item,mid+1,right); }else{ return BinSearch2(arr,item,left,mid-1); } return false; } var arr1=[-34, 1, 3, 4, 5, 8, 34, 45, 65, 87]; console.log(BinSearch2(arr1,5)); //4
原文:https://www.cnblogs.com/tangjianqiang/p/13585365.html