寫一個二分法函數(shù)急黎,返回指定值在數(shù)據(jù)的位置扎狱。
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
以上為代碼演示,歡迎指正勃教!