二分查找需要數組是有序的,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 }
