二分查找需要数组是有序的,1、先从有序数组的最中间元素开始查找,如果和要查找的元素相等,直接返回索引,若不相等则下一步。2、如果指定的元素大于或者小于中间元素,则在大于或小于的那一半区域内查找,重复第一步直到找到目标元素。
不使用递归:
1 function search(arr,key) { 2 var low=0; 3 var height=arr.length-1; 4 var mid; 5 while(low<=height){ 6 mid=Math.floor((low+height)/2); 7 if(arr[mid]==key){ 8 return mid; 9 }else if(arr[mid]<key){ 10 low=mid+1; 11 }else{ 12 height=mid-1; 13 } 14 } 15 return -1; 16 }
使用递归:
1 function search(arr,low,height,key){ 2 height--; 3 if(low>height){ 4 return -1; 5 } 6 var mid=Math.floor((low+height)/2); 7 if(arr[mid]==key){ 8 return mid; 9 }else if(arr[mid]<key){ 10 low=mid+1 11 return search(arr,low,height,key); 12 }else{ 13 mid=height-1; 14 return search(arr,low,height,key); 15 } 16 }