1+ #include < bits/stdc++.h>
2+ using namespace std ;
3+
4+ int FoundPivot (int arr[],int l,int r){
5+ if (l<=r){
6+ int mid = l + (r-l)/2 ;
7+
8+ if (mid<r && arr[mid]>arr[mid+1 ])
9+ return mid;
10+ else if (mid > l && arr[mid] < arr[mid-1 ])
11+ return mid-1 ;
12+
13+ if (arr[mid] >= arr[r])
14+ return FoundPivot (arr, mid+1 , r);
15+
16+ else
17+ return FoundPivot (arr, l, mid-1 );
18+
19+ }
20+ return -1 ;
21+ }
22+ int binarySearch (int arr[], int l, int r, int target){
23+ if (l>r)return -1 ;
24+
25+ int mid = l + (r-l)/2 ;
26+
27+ if (arr[mid] > target){
28+ return binarySearch (arr,l, mid-1 , target);
29+ }
30+ else if (arr[mid] < target){
31+ return binarySearch (arr, mid+1 , r, target);
32+ }
33+ return mid;
34+ }
35+
36+ void searchElementInRotatedArray (int arr[], int target,int n){
37+ int pivot = FoundPivot (arr,0 , n-1 );
38+
39+ if (pivot == -1 )return ;
40+
41+ int found = binarySearch (arr, 0 , pivot, target);
42+
43+ if (found == -1 ){
44+ found = binarySearch (arr, pivot+1 , n-1 , target);
45+ }
46+ if (found == -1 ){
47+ cout<<" NOT PRESENT !!" ;
48+ return ;
49+ }
50+ cout<<" FOUND AT :" <<found;
51+ }
52+
53+ int main (){
54+ int arr[] = {110 ,130 ,140 ,170 ,10 ,20 ,30 ,50 ,60 ,80 };
55+ int n = sizeof (arr)/sizeof (arr[0 ]);
56+ int target = 30 ;
57+ searchElementInRotatedArray (arr, target,n);
58+
59+
60+ }
0 commit comments