写一个二分法函数,返回指定值在数据的位置。
const dichotomy = (arr = [], val = 0) => {
// 默认开始和结束的位置分别为集合的第一个和最后一个
let [start, end] = [0, arr.length - 1];
while (start < end) {
const middle = end == 1 ? 0 : Math.floor((start + end + 1) / 2);
if (arr[middle] > val) {
end = middle;
} else if (arr[middle] < val) {
start = middle;
} else {
return middle;
}
}
return -1;
};
const arr = [...new Array(100)].map((item, i) => i + 1);
const pos = dichotomy(arr, 27);
console.log(pos); //26
以上为代码演示,欢迎指正!