I have implemented binary search solution by using recursion and iterative approach.
I there any way to improve it?
Tests
package test; import main.algorithms.BinarySearchDemo; import org.junit.Assert; import org.junit.Before; import org.junit.Test; public class BinarySearchTest { BinarySearchDemo binarySearchDemo; int[] array; @Before public void setUp(){ binarySearchDemo = new BinarySearchDemo(); array = new int[]{2, 3, 5, 6, 9, 11, 12, 15, 17, 21}; } @Test public void testBinarySearchJavaAPI(){ Assert.assertEquals(2, binarySearchDemo.binarySearchJavaAPI(5,array)); } @Test public void testBinarySearchImpl(){ Assert.assertEquals(2, binarySearchDemo.binarySearchImpl(5,array)); } }
Implementation
package main; public class BinarySearch { private static boolean binarySearchRecursive(int[] array, int i) { return binarySearchRecursive(array,0,array.length-1,i); } private static boolean binarySearchRecursive(int[] array, int left, int right, int item) { if(left > right){ return false; } int pivot = (right - left) / 2 + left; if(item == array[pivot]){ return true; } else if ( item < array[pivot] ){ return binarySearchRecursive(array, left,pivot-1,item); }else { return binarySearchRecursive(array, pivot+1, right, item); } } private static boolean binarySearchIterative(int[] array, int item) { int left = 0; int right = array.length - 1 ; while (left < right) { int mid = (left + right)/2 + left; if (array[mid] == item) { return true; } else if(item < array[mid]) { right = mid-1; } else { left = mid + 1; } } return false; } }