javascript - 二分查找数字字符串数组未找到值

标签 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"];

当我将其插入二进制搜索函数时,如下所示:

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)

返回 true;

最后,我不转换二分搜索输入数组的原因是我需要将此函数用于两种排序数组,即前面提到的数组和其他包含单词的数组,例如: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 ;
}

关于javascript - 二分查找数字字符串数组未找到值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60329231/

相关文章:

javascript - 如何将一个函数的 'forward' 除第一个参数之外的所有参数传递给另一个函数?

c++ - N 选择 k 为大 n 和 k

javascript - 无法读取自定义原型(prototype)中数组未定义的属性 'push'

javascript - TinyMCE链接插件添加自定义属性

javascript - NVD3 调度事件不适用于 HistoricalBarChart

java - “2D”数组数独谜题用枚举进行检查。尽管调试仍无法理解我自己的程序的流程

python - 对字符串进行切片并返回拼接后的字符串

java - Java 字符串是如何工作的

java - 计算最终长度

javascript - 使用 JQuery 设置下拉框的值