Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未找到值的数字字符串的二进制搜索数组_Javascript_Arrays_String_Binary Search Tree - Fatal编程技术网

Javascript 未找到值的数字字符串的二进制搜索数组

Javascript 未找到值的数字字符串的二进制搜索数组,javascript,arrays,string,binary-search-tree,Javascript,Arrays,String,Binary Search Tree,我知道有很多二进制搜索的例子,但是当我有一个编号字符串的排序数组时,我很难找到任何一个 const sortedStringNumbers = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"]; 当我将

我知道有很多二进制搜索的例子,但是当我有一个编号字符串的排序数组时,我很难找到任何一个

const sortedStringNumbers = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"];
当我将其插入如下二进制搜索函数时:

function bsearch (Arr,value){
        var low  = 0 , high = Arr.length -1 ,mid ;      
        while (low <= high){
            mid = Math.floor((low+high)/2);     
            if(Arr[mid]==value) return true; 
            else if (Arr[mid]<value) low = mid+1;
            else high = mid-1;          
        }
        return -1 ;
    }
函数b搜索(Arr,值){
var低=0,高=Arr.length-1,中;

while(low检查以确保数组已排序

当你进行比较的时候

Arr[mid]<value
它们将作为字符串而不是数值进行比较

如您所建议的,如果您希望它在“两种”情况下都能工作,您可以尝试这样的方法

function bsearch (Arr,value){
        var low  = 0 , high = Arr.length -1 ,mid ;      
        while (low <= high){
            mid = Math.floor((low+high)/2);     

            var int_val = Arr[mid];
            if (!isNaN(Arr[mid])) {
                int_val = parseInt(Arr[mid]);
            }

            if(int_val==value) { 
                return true; 
            }
            else if (int_val<value) {
                low = mid+1;
            }
            else {
                high = mid-1;          
            }
        }
        return -1 ;
}
函数b搜索(Arr,值){
var低=0,高=Arr.length-1,中;
while(low)你的“排序”数字没有排序。它们是字符串,所以它们需要按词汇排序,而不是按数字排序。
function bsearch (Arr,value){
        var low  = 0 , high = Arr.length -1 ,mid ;      
        while (low <= high){
            mid = Math.floor((low+high)/2);     

            var int_val = Arr[mid];
            if (!isNaN(Arr[mid])) {
                int_val = parseInt(Arr[mid]);
            }

            if(int_val==value) { 
                return true; 
            }
            else if (int_val<value) {
                low = mid+1;
            }
            else {
                high = mid-1;          
            }
        }
        return -1 ;
}