数据结构之二分法查找

(一)二分法查找

  二分法查找其实就是折半查找,一种效率较高的查找方法,针对有序数组来查的;当数据量很大适于采用该方法;

  主要思想:设查找的数组区间为array[low,high];

  1、确定该区间的中间位置K

  2、将查找的值T与array[K]进行比较。

    1.若相等,则查找成功并返回该位置K;

    2.否则确定新的查找区域,继续二分查找,区域确定如下:

      (1)  array[K] > T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K-1];

      (2)  array[k] < T 类似上面查找区间为array[k+1,……,high];

    每一次查找与中间值比较,可以确定是否查找成功,不成功当前查找区间缩小一半, 递归找

  时间复杂度:O(log2n);

js代码实现

 

 1 function binarySearch(arr,val,leftIndex,rightIndex) {
 2     //找到中间的值
 3     var middleIndex = Math.floor((leftIndex+rightIndex)/2);
 4     var middleVal = arr[middleIndex];
 5     if (leftIndex > rightIndex){
 6         console.log("找不到!");
 7         console.log("上一位是:",middleVal);
 8         console.log("下标",middleIndex);
 9         return ;
10     }
11     if(middleVal>val){
12         binarySearch(arr,val,leftIndex,middleIndex-1)
13     }else if (middleVal<val){
14         binarySearch(arr,val,middleIndex+1,rightIndex)
15     }else {
16         console.log("找到了,下标为:"+middleIndex);
17         return;
18     }
19 }
20 var arr=[1,3,12,21,24,44,54,67];
21 binarySearch(arr,24,0,arr.length-1);

 

posted @ 2017-12-27 19:20  张聪的个人日志  阅读(530)  评论(0)    收藏  举报