Add orderAgnosticBinarySearch (#3882)

Co-authored-by: Andrii Siriak <siryaka@gmail.com>
This commit is contained in:
HumbleFool 2023-02-23 22:49:05 +05:30 committed by GitHub
parent 3c0d94292c
commit 6b9eb1b9c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 59 additions and 0 deletions

View File

@ -0,0 +1,32 @@
package com.thealgorithms.searches;
import java.util.*;
public class sortOrderAgnosticBinarySearch {
public static int find(int arr[],int key){
int start = 0;
int end = arr.length-1;
boolean arrDescending = arr[start]>arr[end]; //checking for Array is in ascending order or descending order.
while(start<=end){
int mid = end-start/2;
if (arr[mid]==key){
return mid;
}
if(arrDescending){ // boolean is true then our array is in descending order
if(key<arr[mid]){
start=mid+1;
}
else{
end=mid-1;
}
}
else { // otherwise our array is in ascending order
if(key>arr[mid]){
start=mid+1;
}
else{
end=mid-1;
}
}
}
return -1;
}
}

View File

@ -0,0 +1,27 @@
package com.thealgorithms.searches;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
public class sortOrderAgnosticBinarySearchTest{
@Test
public void testAscending(){
int arr[] = {1,2,3,4,5};// for ascending order.
int target = 2;
int ans=sortOrderAgnosticBinarySearch.find(arr, target);
int excepted = 1;
assertEquals(excepted,ans);
}
@Test
public void testDescending(){
int arr[] = {5,4,3,2,1};// for descending order.
int target = 2;
int ans=sortOrderAgnosticBinarySearch.find(arr, target);
int excepted = 3;
assertEquals(excepted,ans );
}
}