package search;
import java.util.*;import java.io.*;
public class BinarySearch{ public static int times; /** recursion binarySearch */ public boolean recursionBinarySearch(Comparable[] data,int min,int max,Comparable target) { times++; boolean found = false; int midPoint = (min+max)/2; if (data[midPoint].compareTo(target) ==0) { found = true; } else if (data[midPoint].compareTo(target)>0) { if (min<= midPoint-1) found=binarySearch(data,min,midPoint-1,target); } else if (midPoint+1 <= max) { found = binarySearch(data,midPoint+1,max,target); } return found; } public resetTimes() { this.times = 0; } public boolean steadyBinarySearch(Comparable[] data,int min, int max,Comparable target) { times++; boolean found = false; int midPoint = (min+max)/2; while(min<max) { if (data[midPoint].compareTo(target) >0) max = midPoint; else low = midPoint; } if (data[min].compareTo(target) == 0) found = true; return found; } public static void main(String [] args) throws IOException { String inString ; StringTokenizer tokenizer; Integer [] elements; Comparable target; BinarySearch bs = new BinarySearch(); BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); //get size System.out.println("Please input the size ( size>0 ): "); inString = in.readLine(); elements = new Integer[Integer.parseInt(inString)]; //get data[] System.out.println("Enter the numbers of elements :(gap it with Key_space or Key_tab) "); inString = in.readLine(); tokenizer = new StringTokenizer(inString); for (int i =0; i<elements.length && tokenizer.hasMoreTokens();i++) { elements[i] = Integer.parseInt(tokenizer.nextToken()); } //get target System.out.println("Please input target element: "); inString = in.readLine(); target = new Integer(Integer.parseInt(inString)); long startTime = System.currentTimeMillis(); boolean found = bs.recursionBinarySearch(elements,0,elements.length-1,target); System.out.println("the result: "+found); System.out.println("take time = "+(System.currentTimeMillis()-startTime)); System.out.println("size : "+elements.length+" , cursory times : "+times); }}