From 5ec9878703c4ba52feab9ba1b28132e54b086b8b Mon Sep 17 00:00:00 2001 From: Hardik510 <71917334+Hardik510@users.noreply.github.com> Date: Thu, 29 Sep 2022 18:28:58 +0530 Subject: [PATCH] Create binarySearchInRotatedArray.java Search in rotated array (time complexity = O(logn)) --- 1_Arrays/binarySearchInRotatedArray.java | 64 ++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 1_Arrays/binarySearchInRotatedArray.java diff --git a/1_Arrays/binarySearchInRotatedArray.java b/1_Arrays/binarySearchInRotatedArray.java new file mode 100644 index 0000000..cf6a63d --- /dev/null +++ b/1_Arrays/binarySearchInRotatedArray.java @@ -0,0 +1,64 @@ +import java.util.*; + +public class binarySearchRotatedArray { + public static int findMin(int arr[], int n){ + int left = 0, right = n-1, mid = (left+right)/2; + while(left <= right){ + mid = (left+right)/2; + if(arr[mid-1] >= arr[mid]){ + return mid; + } + else if(arr[mid] >= arr[left] && arr[mid] > arr[right]){ + left = mid+1; + } + else{ + right = mid-1; + } + } + return mid; + } + + public static int binarySearch(int arr[], int n, int key){ + int min = findMin(arr, n); + int left = 0, right = n-1; + + if(arr[min] <= key && key <= arr[n-1]){ + left = min; + } + + else{ + right = min; + } + + while(left <= right){ + int mid = (left + right)/2; + if(arr[mid] == key){ + return mid; + } + else if(arr[mid] > key){ + right = mid-1; + } + else{ + left = mid+1; + } + } + return -1; + } + + public static void main(String[] args){ + // input + Scanner sc = new Scanner(System.in); + int n = sc.nextInt(); + int arr[] = new int[n]; + for(int i = 0; i < n; i++){ + arr[i] = sc.nextInt(); + } + System.out.println("enter key: "); + int key = sc.nextInt(); + + int ans = binarySearch(arr, n, key); + System.out.println(ans); + + sc.close(); + } +}