1)递归
1 function binarySearch(data, dest, start, end){
2 var end = end || data.length - 1,
3 start = start || 0,
4 m = Math.floor((start + end) / 2);
5 if(data[m] == dest){
6 return m;
7 }
8 if(dest < data[m]){
9 return binarySearch(data, dest, 0, m-1);
10 }else{
11 return binarySearch(data, dest, m+1, end);
12 }
13 return false;
14 }
15 var arr = [-34, 1, 3, 4, 5, 8, 34, 45, 65, 87];
16 binarySearch(arr,4);
17 //3
2)非递归
1 function binarySearch(data, dest){
2 var h = data.length - 1,
3 l = 0;
4 while(l <= h){
5 var m = Math.floor((h + l) / 2);
6 if(data[m] == dest){
7 return m;
8 }
9 if(dest > data[m]){
10 l = m + 1;
11 }else{
12 h = m - 1;
13 }
14 }
15
16 return false;
17 }
18 var arr = [-34, 1, 3, 4, 5, 8, 34, 45, 65, 87];
19 binarySearch(arr,4);
20 //3