2、二分法

2018-01-12  本文已影响0人  杀破狼real

写一个二分法函数,返回指定值在数据的位置。

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

以上为代码演示,欢迎指正!

上一篇 下一篇

猜你喜欢

热点阅读