package binarysearch;

/**
 * Binary Search Algorithm
 * @author Winston Prakash
 */
public class BinarySearch {
    public static <T extends Comparable<? super T>> int search(T[] array, T item){
        int low = 0;
        int high = array.length - 1;
        int mid;
        while (low <= high){
            //mid = low + (low - high) / 2;
            mid = (low + high) >>> 1;
            if (array[mid].compareTo(item) < 0){
                low = mid + 1;
            }else if (array[mid].compareTo(item) > 0){
                high = mid - 1;
            }else{
                return mid;
            }
        }
        return -1;
    }
}