var arr = [1, 3, 5, 7, 9, 10, 11, 12, 14, 15]; 如这个数组,假如我想找到数组中的5且还是有序数组,如果用for循环来找也行只是代码的执行次数增多,而二分算法查询,是从中间开始查找,一次过滤一半数据前提是有序数组,
    如下面例子:
    while循环如何结束是个小重点,不然会是死循环,而且中间值不能是小数

    1. //2、在有序的数组里找出指定的值,返回该值在数组中的索引,(二分查找)
    2. var arr = [1, 3, 5, 7, 9, 10, 11, 12, 14, 15];
    3. function getIndex(arr, val) {
    4. var start = 0;
    5. var end = arr.length - 1;
    6. /*
    7. 1、这里分别处理了奇数与偶数的情况
    8. 2、如果为奇数的话,此时只剩下了三个数字。各自走一次,刚好走到中间。走到同一个位置的话,start==end
    9. 3、如果为偶数的话,此时只剩下两个数字。各自己就不需要再走了。再走就超了。start<end
    10. */
    11. // 0 1 2 3 4 5 6 7 8 9
    12. // var arr = [1, 3, 5, 7, 9, 10, 11, 12, 14, 15];
    13. while (start <= end) {
    14. var middle = parseInt((start + end) / 2);
    15. if (val == arr[middle]) {
    16. return middle;
    17. } else if (val < arr[middle]) {
    18. end = middle - 1; //val < arr[middle]说明要寻找的数字在中间值的左边
    19. } else if (val > arr[middle]) {
    20. start = middle + 1; //val > arr[middle] 说明要寻找的数字在中间值的右边
    21. }
    22. }
    23. return -1; //随便给的,告诉用户使用这个方法的时候如果没有找到你要的数字,我就返回个-1
    24. }
    25. console.log(getIndex(arr, 5)); //2