以下是此post中的二进制搜索。 s
表示开始索引,e
表示结束索引。我想我了解他们。
function bs(arr, tar) {
let s = 0;
let e = arr.length - 1;
while(s <= e) {
let m = Math.floor((s + e) / 2);
if(tar === arr[m]) {
return m;
}
if(tar > arr[m]) {
s = m + 1; // follow index
}
if(tar < arr[m]) {
e = m - 1; // follow index
}
}
return -1;
}
let arr = [1, 2, 3, 4, 5, 6, 7];
let tar = 5;
let out = bs(arr, tar);
console.log(out);
有时候我也看到这个版本:
function bs(arr, tar) {
let s = 0;
let e = arr.length; // full len
while(s < e) {
let m = Math.floor((s + e) / 2);
if(tar === arr[m]) {
return m;
}
if(tar > arr[m]) {
s = m + 1; // because s=0;
}
// end, exact index
if(tar < arr[m]) {
e = m; // not m-1, because arr.length???
}
}
return -1;
}
let arr = [1, 2, 3, 4, 5, 6, 7];
let tar = 5;
let out = bs(arr, tar);
console.log(out);
我认为一段时间后,我明白了索引的含义。
答案 0 :(得分:0)
二进制搜索需要一个有序列表才能工作,例如数字列表。这个想法是在右半部分搜索一个元素,这是可能的,因为该算法收敛到一个。假设您有一个包含10(1、10、54、70、100、110、120、130、150、200)个数字的列表,并且正在寻找120。将列表分为两半并寻找中间元素(100)120是否大于100?是的,因此元素位于列表的下半部分,现在起点是列表的中间位置,结束位置是列表的末尾,继续操作直到找到一个元素(要查找的元素)。希望这对您有帮助