数据结构之二分法查找
(一)二分法查找
二分法查找其实就是折半查找,一种效率较高的查找方法,针对有序数组来查的;当数据量很大适于采用该方法;
主要思想:设查找的数组区间为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);

浙公网安备 33010602011771号