Binary Search

Code

Python

def binarySearch(array, target):
return binarySearchHelper(array, target, 0, len(array) - 1)
def binarySearchHelper(array, target, left, right):
if left > right:
return -1
middle = (left + right) // 2
potentialMatch = array[middle]
if target == potentialMatch:
return middle
elif target < potentialMatch:
return binarySearchHelper(array, target, left, middle - 1)
else:
return binarySearchHelper(array, target, middle + 1, right)

JavaScript

function binarySearch(array, target) {
return binarySearchHelper(array, target, 0, array.length - 1);
}
function binarySearchHelper(array, target, left, right) {
if (left > right) return -1;
const middle = Math.floor((left + right) / 2);
const potentialMatch = array[middle];
if (target === potentialMatch) {
return middle;
} else if (target < potentialMatch) {
return binarySearchHelper(array, target, left, middle - 1);
} else {
return binarySearchHelper(array, target, middle + 1, right);
}
}
exports.binarySearch = binarySearch;

TypeScript

export function binarySearch(array: number[], target: number) {
return binarySearchHelper(array, target, 0, array.length - 1);
}
function binarySearchHelper(array: number[], target: number, left: number, right: number): number {
if (left > right) return -1;
const middle = Math.floor((left + right) / 2);
const potentialMatch = array[middle];
if (target === potentialMatch) {
return middle;
} else if (target < potentialMatch) {
return binarySearchHelper(array, target, left, middle - 1);
} else {
return binarySearchHelper(array, target, middle + 1, right);
}
}

Java

class Program {
public static int binarySearch(int[] array, int target) {
return binarySearch(array, target, 0, array.length - 1);
}
public static int binarySearch(int[] array, int target, int left, int right) {
if (left > right) {
return -1;
}
int middle = (left + right) / 2;
int potentialMatch = array[middle];
if (target == potentialMatch) {
return middle;
} else if (target < potentialMatch) {
return binarySearch(array, target, left, middle - 1);
} else {
return binarySearch(array, target, middle + 1, right);
}
}
}

C++

#include <vector>
using namespace std;
int binarySearch(vector<int> array, int target);
int binarySearchHelper(vector<int> array, int target, int left, int right);
int binarySearch(vector<int> array, int target) {
return binarySearchHelper(array, target, 0, array.size() - 1);
}
int binarySearchHelper(vector<int> array, int target, int left, int right) {
if (left > right) {
return -1;
}
int middle = (left + right) / 2;
int potentialMatch = array[middle];
if (target == potentialMatch) {
return middle;
} else if (target < potentialMatch) {
return binarySearchHelper(array, target, left, middle - 1);
} else {
return binarySearchHelper(array, target, middle + 1, right);
}
}

Space-Time Complexity

TimeSpace
WorseO(log(n))O(log(n))

Where n is the length of the input array