我知道有大量的二分搜索示例,但例如,当我有一个编号字符串的排序数组时,我很难让任何示例工作。
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/