Advertisement
Guest User

Problem15_RecursiveBinarySearch

a guest
Oct 25th, 2015
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.56 KB | None | 0 0
  1. import java.util.Scanner;
  2.  
  3. public class Problem15_RecursiveBinarySearch {
  4.     public static void main(String[] args) {
  5.         Scanner input = new Scanner(System.in);
  6.  
  7.         String[] numbersInString = input.nextLine().split(" ");
  8.         int numberToSearch = Integer.parseInt(input.nextLine());
  9.  
  10.         int[] numbers = new int[numbersInString.length];
  11.         for (int i = 0; i < numbers.length; i++) {
  12.             numbers[i] = Integer.parseInt(numbersInString[i]);
  13.         }
  14.  
  15.         int startIndex = 0;
  16.         int endIndex = numbers.length - 1;
  17.         System.out.println(performBinarySearch(numbers, numberToSearch, startIndex, endIndex));
  18.     }
  19.  
  20.     private static int performBinarySearch(int[] numbers, int numberToSearch, int startIndex, int endIndex) {
  21.         int middleIndex = (startIndex + endIndex) / 2;
  22.         if (startIndex > endIndex) {
  23.             return -1;
  24.         }
  25.  
  26.         if (numbers[middleIndex] == numberToSearch) {
  27.             // if we enter the loop this means, that the are two or more numbers equal to the number we are searching for, and we have to take the first of them.
  28.             while (middleIndex - 1 >= 0 && numbers[middleIndex - 1] == numberToSearch) {
  29.                 middleIndex--;
  30.             }
  31.             return middleIndex;
  32.         } else if (numberToSearch < numbers[middleIndex]) {
  33.             return performBinarySearch(numbers, numberToSearch, startIndex, middleIndex - 1);
  34.         } else {
  35.             return performBinarySearch(numbers, numberToSearch, middleIndex + 1, endIndex);
  36.         }
  37.     }
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement