//package poo.buscadores;

//import java.io.Console;
import java.io.*;
import java.util.ArrayList;
import java.util.regex.Pattern;
import java.util.regex.Matcher;


/**
 * Clase BinarySearche que implementa  metodos de Buscador y relaiza un busqueda binaria.
 * 
 */
public class BinarySearcher extends Buscador{

	/**
	 * @param A arreglo de Objetos A, Object[].
	 * @param obj El objeto que se desea buscar en el arreglo de objetos A.
	 */
	public int buscar(Object[] A, Object obj) {
		int low = 0;
		int high = A.length - 1;
		int mid;
		Comparable[] comp;

		if(obj instanceof Comparable)
			comp = (Comparable[])A;
		else 
			return NOT_FOUND;

		while( low <= high )
		{
			mid = ( low + high ) / 2;

			if( comp[ mid ].compareTo( obj ) < 0 )
				low = mid + 1;
			else if( comp[ mid ].compareTo( obj ) > 0 )
				high = mid - 1;
			else
				//if(A[mid].equals(obj))
				return mid;

			num_comparaciones++;
		}

		return NOT_FOUND;     // NOT_FOUND = -1
	}


	/**
	* Metodo heredado de Buscador. 
	*/
	public int getNumComparaciones() {
		return num_comparaciones;
	}
	
	/**
	 * 
	 */
	public String toString() {
		return "BINARY SEARCHER";
	}
	
	private int num_comparaciones = 0;
	public static final int NOT_FOUND = -1;
	
	

}
