我正在为二进制搜索算法编写自己的函数,但我似乎无法找到逻辑上的差异。每当我搜索 4 时,它都不会返回理想的响应。
代码如下:
var list = [1,2,3,4,6,7,13,18,19];
function binarySearch(list,number) {
var newList = list;
while (newList.length >= 1) {
var halfNum = Math.round(newList.length/2);
if (newList[halfNum] === number) {
return "Number Found";
} else if (newList[halfNum] < number) {
newList = newList.slice(halfNum + 1,newList.length - 1);
} else {
newList = newList.slice(0,halfNum - 1);
}
}
}
console.log(binarySearch(list,4));
最佳答案
这里的问题是你做错了范围。 javascript slice 函数将数组切入区间 [start,finish),我的意思是它不包括新数组中的结束索引
所以你应该改变这个:
} else if (newList[halfNum] < number) {
newList = newList.slice(halfNum + 1,newList.length - 1);
} else {
newList = newList.slice(0,halfNum - 1);
}
对此:
} else if (newList[halfNum] < number) {
newList = newList.slice(halfNum + 1,newList.length);
} else {
newList = newList.slice(0,halfNum);
}
关于javascript - 二进制搜索代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21922906/