首页 > Web开发 > 详细

js 二分查找

时间:2020-08-30 16:14:19      阅读:57      评论:0      收藏:0      [点我收藏+]

二分查找也叫对折查找,对于一个从小到大的有序数组,想要在数组中找到某个值,依次对折查找,小于就在从左边开始,大于就从右边开始,再判断对折后当前的那个索引的值和需要查找的值对比,如果小则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

 

js 二分查找

原文:https://www.cnblogs.com/tangjianqiang/p/13585365.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!