Added [FEATURE REQUEST] <Recursive Binary Search> #4457 (#4469)

* Create RecursiveBinarySearch.java

* Update RecursiveBinarySearch.java

* Update RecursiveBinarySearch.java

* Update RecursiveBinarySearch.java

* Update RecursiveBinarySearch.java

* Create ReverseArray.java

* Update RecursiveBinarySearch.java

* Update RecursiveBinarySearch.java

* Create RecursiveBinarySearchTest.java

* Update RecursiveBinarySearchTest.java

* Update RecursiveBinarySearchTest.java

* Delete src/main/java/com/thealgorithms/others/ReverseArray.java

* Update RecursiveBinarySearchTest.java

* Update RecursiveBinarySearchTest.java

* Create ReverseArray.java

* Delete src/main/java/com/thealgorithms/others/ReverseArray.java

* Update RecursiveBinarySearchTest.java

* Update RecursiveBinarySearch.java
This commit is contained in:
Pronay Debnath 2023-10-01 20:52:51 +05:30 committed by GitHub
parent ee2629c8ab
commit da687c11cb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 114 additions and 0 deletions

View File

@ -0,0 +1,74 @@
// Code by Pronay Debnath
// Created:- 1/10/2023
// File Name should be RecursiveBinarySearch.java
// Explanation:- https://www.tutorialspoint.com/java-program-for-binary-search-recursive
import java.util.*;
// Create a SearchAlgorithm class with a generic type
abstract class SearchAlgorithm<T extends Comparable<T>> {
// Abstract find method to be implemented by subclasses
public abstract int find(T[] arr, T target);
}
public class RecursiveBinarySearch<T extends Comparable<T>> extends SearchAlgorithm<T> {
// Override the find method as required
@Override
public int find(T[] arr, T target) {
// Call the recursive binary search function
return binsear(arr, 0, arr.length - 1, target);
}
// Recursive binary search function
public int binsear(T[] arr, int left, int right, T target) {
if (right >= left) {
int mid = left + (right - left) / 2;
// Compare the element at the middle with the target
int comparison = arr[mid].compareTo(target);
// If the element is equal to the target, return its index
if (comparison == 0) {
return mid;
}
// If the element is greater than the target, search in the left subarray
if (comparison > 0) {
return binsear(arr, left, mid - 1, target);
}
// Otherwise, search in the right subarray
return binsear(arr, mid + 1, right, target);
}
// Element is not present in the array
return -1;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// User inputs
System.out.print("Enter the number of elements in the array: ");
int n = sc.nextInt();
Integer[] a = new Integer[n]; // You can change the array type as needed
System.out.println("Enter the elements in sorted order:");
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
System.out.print("Enter the target element to search for: ");
int t = sc.nextInt();
RecursiveBinarySearch<Integer> searcher = new RecursiveBinarySearch<>();
int res = searcher.find(a, t);
if (res == -1)
System.out.println("Element not found in the array.");
else
System.out.println("Element found at index " + res);
}
}

View File

@ -0,0 +1,40 @@
// Created by Pronay Debnath
// Date:- 1/10/2023
// Test file updated with JUnit tests
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test; // Import the JUnit 5 Test annotation
public class RecursiveBinarySearchTest {
@Test
public void testBinarySearch() {
// Create an instance of GenericBinarySearch
RecursiveBinarySearch<Integer> searcher = new RecursiveBinarySearch<>();
// Test case 1: Element found in the array
Integer[] arr1 = {1, 2, 3, 4, 5};
int target1 = 3;
int result1 = searcher.binsear(arr1, 0, arr1.length - 1, target1);
assertEquals(2, result1);
// Test case 2: Element not found in the array
Integer[] arr2 = {1, 2, 3, 4, 5};
int target2 = 6;
int result2 = searcher.binsear(arr2, 0, arr2.length - 1, target2);
assertEquals(-1, result2);
// Test case 3: Element found at the beginning of the array
Integer[] arr3 = {10, 20, 30, 40, 50};
int target3 = 10;
int result3 = searcher.binsear(arr3, 0, arr3.length - 1, target3);
assertEquals(0, result3);
// Test case 4: Element found at the end of the array
Integer[] arr4 = {10, 20, 30, 40, 50};
int target4 = 50;
int result4 = searcher.binsear(arr4, 0, arr4.length - 1, target4);
assertEquals(4, result4);
}
}