From 4a830ce8fb8bc4460a92eb89bf7f68f8d867e63a Mon Sep 17 00:00:00 2001 From: Viraj Nirbhavane Date: Thu, 21 Oct 2021 20:44:58 +0530 Subject: [PATCH] Add Order Agnostic Binary Search --- Java/OrderAgnosticBS.java | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Java/OrderAgnosticBS.java diff --git a/Java/OrderAgnosticBS.java b/Java/OrderAgnosticBS.java new file mode 100644 index 0000000..1d100de --- /dev/null +++ b/Java/OrderAgnosticBS.java @@ -0,0 +1,47 @@ +package com.viraj; + +public class OrderAgnosticBS { + public static void main(String[] args) { + int[] arr = {-18, -12, -4, 0, 2, 3, 4, 15, 16, 18, 22, 45, 89}; + int target = 5; + int ans = orderAgnosticBS(arr,target); + System.out.println(ans); + } + + static int orderAgnosticBS(int[] arr, int target){ + + int start = 0; + int end = arr.length - 1; + + //find whether the array is sorted in ascending or descending. + boolean isAsc = arr[start] < arr[end]; + + + + while(start <= end){ + //find the middle element + //int mid = (start + end) / 2; //might be possible that (start + end ) exceeds the range of int. + int mid = start + (end-start)/2; + + if(arr[mid] == target) return mid; + + if(isAsc){ + if(target < arr[mid]){ + end = mid - 1; + } + else { + start = mid+1; + } + } + else{ + if(target > arr[mid]){ + end = mid - 1; + } + else { + start = mid+1; + } + } + } + return -1; + } +}