Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 19 commits into from
Oct 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}