//bSearch.java
/*---------------------------------------------------------------
' class bSearch for package search
'
' Shawn McKenna
'
' DESC: 	This class is used to sort arrays using a binary method of divide and conquer.
'		This means that the arrays must be in order (sorted) before you can search. 
' 
' NOTE:	These methods assume data has been sorted. Always sort arrays before using a
'		binary search. I have included searching for all the number types.  I have not put
'		in anything for character, string or class wrapper data.   
'	
'		Since JDK 1.2, there are several methods that do a binary search (binarySearch)
'		that are located in java.util.Arrays .  Just like mine, data must be sorted 
'		before they can be searched.
'
' GENERIC NOTE:	All my code has been tested, my apologies for any unforseen errors.  
'			Suggestions are always welcome.  Feel free to use or change any of this 
'			code.
'
' CONSTRUCTOR: 	NOT USED
'
' METHODS:
'	search(byte array[], byte num)
'		MODIFIER: public, static
'     	DESC: Binary search for a byte array. Returns true if num is found and returns
'			false if num is not found.               
'		RETURN TYPE: boolean true if num is found and a boolean false if not found.	
'	search(short array[], short num)
'		MODIFIER: public, static
'     	DESC: Binary search for a byte array. Returns true if num is found and returns
'			false if num is not found.               
'		RETURN TYPE: boolean true if num is found and a boolean false if not found.	
'	search(int array[], int num)
'		MODIFIER: public, static
'     	DESC: Binary search for a byte array. Returns true if num is found and returns
'			false if num is not found.               
'		RETURN TYPE: boolean true if num is found and a boolean false if not found.	
'	search(long array[], long num)
'		MODIFIER: public, static
'     	DESC: Binary search for a byte array. Returns true if num is found and returns
'			false if num is not found.               
'		RETURN TYPE: boolean true if num is found and a boolean false if not found.	
'	search(float array[], float num)
'		MODIFIER: public, static
'     	DESC: Binary search for a byte array. Returns true if num is found and returns
'			false if num is not found.               
'		RETURN TYPE: boolean true if num is found and a boolean false if not found.	
'	search(double array[], double num)
'		MODIFIER: public, static
'     	DESC: Binary search for a byte array. Returns true if num is found and returns
'			false if num is not found.               
'		RETURN TYPE: boolean true if num is found and a boolean false if not found.	
'
' EXAMPLE FOR DECLARING METHODS --
'		// arrays have to be sorted before you can successfully use a binary sort.
'		double temp[] = { 1, 3, 5, 6, 99.9 };
'		int iTemp[] = { 1, 3, 5, 6, 99 };
'
'		if (search(temp, 99.9))		
'			System.out.println("Found");
'		else
'			System.out.println("Not Found");
'		if (search(iTemp, 99))		
'			System.out.println("Found");
'		else
'			System.out.println("Not Found");
'
' DATE MODIFIED:	 11/9/2000
' VERSION:		 1.0
'----------------------------------------------------------------
*/	

package search;

public class bSearch
{

	public static boolean search (byte array[], byte num)
	{
		int lower = 0;
		int upper = array.length - 1;

		while (lower <= upper)
		{
			int middle = (lower + upper) / 2;
	
			if (num > array[middle])
				lower = middle + 1;
			else if (num < array[middle])
				upper = middle - 1;
			else
				break;
		} // end of while
		
		if (lower > upper)
			return false;
		else
			return true;

	} // end of search method for byte

	public static boolean search (short array[], short num)
	{
		int lower = 0;
		int upper = array.length - 1;

		while (lower <= upper)
		{
			int middle = (lower + upper) / 2;
	
			if (num > array[middle])
				lower = middle + 1;
			else if (num < array[middle])
				upper = middle - 1;
			else
				break;
		} // end of while
		
		if (lower > upper)
			return false;
		else
			return true;

	} // end of search method for short


	public static boolean search (int array[], int num)
	{
		int lower = 0;
		int upper = array.length - 1;

		while (lower <= upper)
		{
			int middle = (lower + upper) / 2;
	
			if (num > array[middle])
				lower = middle + 1;
			else if (num < array[middle])
				upper = middle - 1;
			else
				break;
		} // end of while
		
		if (lower > upper)
			return false;
		else
			return true;

	} // end of search method for int

public static boolean search (long array[], long num)
	{
		int lower = 0;
		int upper = array.length - 1;

		while (lower <= upper)
		{
			int middle = (lower + upper) / 2;
	
			if (num > array[middle])
				lower = middle + 1;
			else if (num < array[middle])
				upper = middle - 1;
			else
				break;
		} // end of while
		
		if (lower > upper)
			return false;
		else
			return true;

	} // end of search method for long data types

	public static boolean search (float array[], float num)
	{
		int lower = 0;
		int upper = array.length - 1;

		while (lower <= upper)
		{
			int middle = (lower + upper) / 2;
	
			if (num > array[middle])
				lower = middle + 1;
			else if (num < array[middle])
				upper = middle - 1;
			else
				break;
		} // end of while
		
		if (lower > upper)
			return false;
		else
			return true;

	} // end of search method for float

	public static boolean search (double array[], double num)
	{
		int lower = 0;
		int upper = array.length - 1;

		while (lower <= upper)
		{
			int middle = (lower + upper) / 2;
	
			if (num > array[middle])
				lower = middle + 1;
			else if (num < array[middle])
				upper = middle - 1;
			else
				break;
		} // end of while
		
		if (lower > upper)
			return false;
		else
			return true;

	} // end of search method

} // end of class bSearch
