js二分查找

递归
    1 找到中间值
    2 比较key和中间值,key小往左递归,key大往右递归
    3 递归停止条件,等于则返回下标;开始下标大于结束则返回-1

    function binarySearch(arr, key, start, end){
        if(start>end) return -1;
        var m = Math.ceil((start+end)/2);
        if(arr[m] == key){
            return m;
        }
        if(key < arr[m]){
            return binarySearch(arr, key, 0, m-1);
        }
        else if(key > arr[m]){
            return binarySearch(arr, key, m+1, arr.length-1)
        }
    }

    var arr = [1,2,3,4,5];
    console.log(binarySearch(arr, 6, 0, arr.length-1));

非递归
    function binarySearch(arr, key){
       var start = 0;
       var end = arr.length-1;
       var m = 0;
       while(start<=end){
               m = Math.ceil((start + end)/2);
               if(key == arr[m]){
                   return m;
               }
               else if(key < arr[m]){
                   end = m - 1;
               }else if(key > arr[m]){
                   start = m + 1;
               }
       }
       return -1;
    }

    var arr = [1,2,3,4,5];
    console.log(binarySearch(arr, 6, 0, arr.length-1));

猜你喜欢

转载自blog.csdn.net/rongmingye/article/details/82496747
今日推荐