mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-07-20 18:24:49 +08:00

* enable style NeedBraces * style: enable NeedBraces in checkstyle --------- Co-authored-by: Samuel Facchinello <samuel.facchinello@piksel.com>
50 lines
1.7 KiB
Java
50 lines
1.7 KiB
Java
package com.thealgorithms.searches;
|
|
|
|
// URL: https://www.geeksforgeeks.org/order-agnostic-binary-search/
|
|
|
|
/* Order Agnostic Binary Search is an algorithm where we do not know whether the given
|
|
sorted array is ascending or descending order.
|
|
We declare a boolean variable to find whether the array is ascending order.
|
|
In the while loop, we use the two pointer method (start and end) to get the middle element.
|
|
if the middle element is equal to our target element, then that is the answer.
|
|
If not, then we check if the array is ascending or descending order.
|
|
Depending upon the condition, respective statements will be executed and we will get our answer.
|
|
*/
|
|
|
|
public final class OrderAgnosticBinarySearch {
|
|
private OrderAgnosticBinarySearch() {
|
|
}
|
|
|
|
static int binSearchAlgo(int[] arr, int start, int end, int target) {
|
|
|
|
// Checking whether the given array is ascending order
|
|
boolean ascOrd = arr[start] < arr[end];
|
|
|
|
while (start <= end) {
|
|
int middle = start + (end - start) / 2;
|
|
|
|
// Check if the desired element is present at the middle position
|
|
if (arr[middle] == target) {
|
|
return middle; // returns the index of the middle element
|
|
}
|
|
if (ascOrd) {
|
|
// Ascending order
|
|
if (arr[middle] < target) {
|
|
start = middle + 1;
|
|
} else {
|
|
end = middle - 1;
|
|
}
|
|
} else {
|
|
// Descending order
|
|
if (arr[middle] > target) {
|
|
start = middle + 1;
|
|
} else {
|
|
end = middle - 1;
|
|
}
|
|
}
|
|
}
|
|
// Element is not present
|
|
return -1;
|
|
}
|
|
}
|