Javascript 二进制搜索的替代解决方案同样好吗?

Javascript 二进制搜索的替代解决方案同样好吗?,javascript,algorithm,search,binary-search,Javascript,Algorithm,Search,Binary Search,对于二进制搜索问题,我提出了以下解决方案: function binarySearch(arr,numba){ var left = 0 var right = arr.length - 1 while (left <= right){ let middle = Math.floor((left+right)/2) if (arr[middle] < numba){ left ++;

对于二进制搜索问题,我提出了以下解决方案:

function binarySearch(arr,numba){
    
    var left = 0
    var right = arr.length - 1
    
    while (left <= right){
        let middle = Math.floor((left+right)/2)
        if (arr[middle] < numba){
            left ++;
            
        }
        else if (numba < arr[middle]){
            right -- ;
            
        }
        else if (numba === arr[middle]){
            return middle
        }
    }
    return -1
}
函数二进制搜索(arr,numba){
左变量=0
右侧变量=arr.length-1

而(左是的,第二个解决方案更好。它是唯一一个实际执行二进制搜索的解决方案(计算复杂度为
O(logn)
)。请参阅下面的代码片段,了解需要使用建议的解决方案重新计算
中间部分的次数:

function binarySearch(arr,numba){
    
    var left = 0
    var right = arr.length - 1
    
    while (left <= right){
        let middle = Math.floor((left+right)/2)
        if (arr[middle] < numba){
            left ++;
            
        }
        else if (numba < arr[middle]){
            right -- ;
            
        }
        else if (numba === arr[middle]){
            return middle
        }
    }
    return -1
}
函数二进制搜索(arr,elem){
var start=0;
var end=阵列长度-1;
var middle=数学楼层((起点+终点)/2);
设iterCount=0;
while(arr[中间]!==元素和开始i);

binarySearc(arr,30);
在我看来基本上是一样的,尽管你的代码看起来更简洁、更容易推理,重复的代码更少。有些人喜欢“单返回语句”事情和需要打破循环并执行双重条件,以满足他们总是不惜一切代价只拥有一个返回语句的渴望。在代码中打印
值,在另一个代码中打印
开始
结束
,区别应该很明显:您的代码不是二进制搜索.