3030 Memory Complexity: O(log n)
3131*/
3232export function recursiveBinarySearch ( arr , key , low , high ) {
33- let result = - 1 ;
34- // let low = 0;
35- //let high = arr.length - 1;
36- let mid ;
33+ if ( low > high ) {
34+ return - 1 ;
35+ }
3736
38- mid = low + Math . round ( high - low ) ;
39- if ( arr [ mid ] === key ) {
40- result = mid ;
37+ const mid = low + Math . floor ( ( high - low ) / 2 ) ;
4138
42- return result ;
39+ if ( arr [ mid ] === key ) {
40+ return mid ;
4341 }
4442 if ( arr [ mid ] < key ) {
45- low = mid + 1 ;
43+ return recursiveBinarySearch ( arr , key , mid + 1 , high ) ;
4644 } else {
47- high = mid - 1 ;
48- }
49-
50- if ( low <= high ) {
51- result = recursiveBinarySearch ( arr , key , low , high ) ;
45+ return recursiveBinarySearch ( arr , key , low , mid - 1 ) ;
5246 }
53-
54- return result ;
5547}
5648
5749// test
6557log ( recursiveBinarySearch ( [ 10 , 20 , 30 , 35 , 40 , 50 ] , 30 , 0 , 5 ) , 2 ) ;
6658log ( recursiveBinarySearch ( [ 10 , 20 , 20 , 20 , 40 , 50 ] , 40 , 0 , 5 ) , 4 ) ;
6759
68-
69- let arr = [ 1 , 10 , 20 , 47 , 59 , 63 , 75 , 88 , 99 , 107 , 120 , 133 , 155 , 162 , 176 , 188 , 199 , 200 , 210 , 222 ]
70- let inputs = [ [ 10 , 1 ] , [ 49 , - 1 ] , [ 99 , 8 ] , [ 110 , - 1 ] , [ 176 , 14 ] ]
71-
72- for ( var i = 0 ; i < inputs . length ; i ++ ) {
73- log ( recursiveBinarySearch ( arr , inputs [ i ] [ 0 ] , 0 , arr . length - 1 ) , inputs [ i ] [ 1 ] ) ;
60+ let arr = [
61+ 1 , 10 , 20 , 47 , 59 , 63 , 75 , 88 , 99 , 107 , 120 , 133 , 155 , 162 , 176 , 188 , 199 ,
62+ 200 , 210 , 222 ,
63+ ] ;
64+ let inputs = [
65+ [ 10 , 1 ] ,
66+ [ 49 , - 1 ] ,
67+ [ 99 , 8 ] ,
68+ [ 110 , - 1 ] ,
69+ [ 176 , 14 ] ,
70+ ] ;
71+
72+ for ( var i = 0 ; i < inputs . length ; i ++ ) {
73+ log (
74+ recursiveBinarySearch ( arr , inputs [ i ] [ 0 ] , 0 , arr . length - 1 ) ,
75+ inputs [ i ] [ 1 ]
76+ ) ;
7477}
7578
76-
77-
78-
7979/* Approach 1: Iterative Search
8080 Runtime Complexity: O(log n)
8181 Memory Complexity: O(1)
@@ -88,7 +88,7 @@ export function iterativeBinarySearch(arr, key) {
8888
8989 // find the mid
9090 while ( low <= high ) {
91- mid = low + Math . round ( high - low ) ;
91+ mid = low + Math . floor ( ( high - low ) / 2 ) ;
9292 if ( arr [ mid ] === key ) {
9393 result = mid ;
9494
@@ -107,9 +107,9 @@ export function iterativeBinarySearch(arr, key) {
107107function log ( result , expected ) {
108108 console . log ( '========' ) ;
109109 if ( result === expected ) {
110- console . info ( '%c PASS' , 'color:black;background-color:lawngreen' ) ;
110+ console . info ( '%c PASS' , 'color:black;background-color:lawngreen' ) ;
111111 } else {
112- console . info ( '%c FAIL' , 'color:white;background-color:red' ) ;
112+ console . info ( '%c FAIL' , 'color:white;background-color:red' ) ;
113113 }
114114
115115 console . log ( `result: ${ result } , expected: ${ expected } ` ) ;
@@ -122,6 +122,6 @@ log(iterativeBinarySearch([4, 5, 6, 7, 8, 9, 10, 11], 9), 5);
122122log ( iterativeBinarySearch ( [ - 10 , - 9 , - 8 , - 7 , - 6 , - 5 , - 4 , 5 , 6 , 7 , 8 ] , - 6 ) , 4 ) ;
123123log ( iterativeBinarySearch ( [ 10 , 20 , 30 , 35 , 40 , 50 ] , 30 ) , 2 ) ;
124124log ( iterativeBinarySearch ( [ 10 , 20 , 20 , 20 , 40 , 50 ] , 40 ) , 4 ) ;
125- for ( var i = 0 ; i < inputs . length ; i ++ ) {
125+ for ( var i = 0 ; i < inputs . length ; i ++ ) {
126126 log ( iterativeBinarySearch ( arr , inputs [ i ] [ 0 ] ) , inputs [ i ] [ 1 ] ) ;
127- }
127+ }
0 commit comments