1
+ function findPivotPoint ( arr ) {
2
+ let low = 0 ,
3
+ high = arr . length - 1 ;
4
+ while ( low < high ) {
5
+ if ( low == high ) return low ;
6
+ let m = parseInt ( ( low + high ) / 2 ) ;
7
+ if ( m < high && arr [ m ] > arr [ m + 1 ] ) return m ;
8
+ else if ( m > low && arr [ m ] < arr [ m - 1 ] ) return m - 1 ;
9
+ else if ( arr [ low ] >= arr [ m ] ) high = m - 1 ;
10
+ else low = m + 1 ;
11
+ }
12
+ return - 1 ;
13
+ }
14
+
15
+ function searchK ( arr , low , high , k ) {
16
+ while ( low <= high ) {
17
+ let m = parseInt ( ( low + high ) / 2 ) ;
18
+ if ( arr [ m ] == k ) return m ;
19
+ else if ( arr [ m ] < k ) low = m + 1 ;
20
+ else if ( arr [ m ] > k ) high = m - 1 ;
21
+ }
22
+ return - 1 ;
23
+ }
24
+
25
+ function searchInRotatedArray ( arr , k ) {
26
+ let pivot = findPivotPoint ( arr )
27
+ if ( pivot == - 1 ) return searchK ( arr , 0 , arr . length - 1 , k ) ;
28
+ if ( k == arr [ pivot ] ) return pivot ;
29
+ if ( k >= arr [ 0 ] && k < arr [ pivot ] ) {
30
+ return searchK ( arr , 0 , pivot , k ) ;
31
+ } else {
32
+ return searchK ( arr , pivot + 1 , arr . length - 1 , k ) ;
33
+ }
34
+ }
35
+
36
+ let arr = [ 6 , 7 , 8 , 9 , 10 , 11 , 12 , 30 , 1 , 2 , 3 , 4 , 5 ] ;
37
+ let k = 30 ;
38
+ let index = searchInRotatedArray ( arr , k ) ;
39
+ if ( index == - 1 ) {
40
+ console . log ( k + ' not found' ) ;
41
+ } else {
42
+ console . log ( k + ' found at index ' + index ) ;
43
+ }
0 commit comments