繁体   English   中英

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

[英]Binary Search array of number strings not finding values

我知道有大量的二进制搜索示例,但是例如,当我有一个已排序的编号字符串数组时,我很难让任何示例工作。

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 ;
    }

当我运行时:

bsearch(sortedStringNumbers, '3')

它返回-1

当我运行时:

bsearch(sortedStringNumbers, '26)

它返回真;

最后,我根本不转换二进制搜索输入数组的原因是我需要将此函数用于两种排序数组,上述类型和其他包含单词的数组,例如: const sortedWordsArray = ['Algebra', 'Biology', 'Chemistry', ...]

二进制搜索数组确实适用于单词数组,顺便说一句。

检查以确保您的数组已排序。

当你进行比较时

Arr[mid]<value

或者

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 ;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM