1. 前提排列好的数组里面查询一个值n的位置
    2. 先找中间的值,如果中间的值与其相等,在返回当前index
    3. 如果小于(或大于)中间的值,则将左边(右边)所以的值分为两份按照步骤1开始循环。

    https://jsbin.com/lehoxehoda/1/edit?js,console

    1. const binarySearch = (a, n, start, end) => {
    2. if (start === end) return -1;
    3. const middle = Math.floor((start + end) / 2);
    4. if (a[middle] === n) {
    5. return middle;
    6. } else if (a[middle] < n) {
    7. return binarySearch(a, n, middle, end);
    8. } else {
    9. return binarySearch(a, n, start, middle );
    10. }
    11. }
    12. const a = [1, 2, 4, 9, 10, 12, 20];
    13. console.log(binarySearch(a, 0, 0, a.length))
    14. console.log(binarySearch(a, 10, 0, a.length))