Skip to content

Commit 16fc330

Browse files
authored
Added rotated binary search div-bargali#550
Added rotated binary search
2 parents 3d9315a + 8c1ac64 commit 16fc330

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
public class rotated_binary_search{
2+
3+
static int binarySearch(int arr[], int low, int high, int key)
4+
{
5+
if (high < low)
6+
return -1;
7+
8+
/* low + (high - low)/2; */
9+
int mid = (low + high) / 2;
10+
if (key == arr[mid])
11+
return mid;
12+
if (key > arr[mid])
13+
return binarySearch(arr, (mid + 1), high, key);
14+
return binarySearch(arr, low, (mid - 1), key);
15+
}
16+
17+
static int pivotedBinarySearch(int arr[], int n, int key)
18+
{
19+
int pivot = findPivot(arr, 0, n - 1);
20+
if (pivot == -1)
21+
return binarySearch(arr, 0, n - 1, key);
22+
23+
24+
if (arr[pivot] == key)
25+
return pivot;
26+
if (arr[0] <= key)
27+
return binarySearch(arr, 0, pivot - 1, key);
28+
return binarySearch(arr, pivot + 1, n - 1, key);
29+
}
30+
31+
static int findPivot(int arr[], int low, int high)
32+
{
33+
// base cases
34+
if (high < low)
35+
return -1;
36+
if (high == low)
37+
return low;
38+
39+
/* low + (high - low)/2; */
40+
int mid = (low + high) / 2;
41+
if (mid < high && arr[mid] > arr[mid + 1])
42+
return mid;
43+
if (mid > low && arr[mid] < arr[mid - 1])
44+
return (mid - 1);
45+
if (arr[low] >= arr[mid])
46+
return findPivot(arr, low, mid - 1);
47+
return findPivot(arr, mid + 1, high);
48+
}
49+
50+
public static void main(String [] args){
51+
int arr1[] = { 5, 6, 7, 8, 9, 10, 1, 2, 3 };
52+
int n = arr1.length;
53+
int key = 3;
54+
System.out.println("Index of the element is : "
55+
+ pivotedBinarySearch(arr1, n, key));
56+
}
57+
}

0 commit comments

Comments
 (0)