Mega Code Archive

 
Categories / Java / Collections Data Structure
 

Binary Search

public class BinarySearchArray {   private long[] a;    private int nElems;    public BinarySearchArray(int max) {     a = new long[max]; // create array     nElems = 0;   }   public int size() {     return nElems;   }   public int find(long searchKey) {     return recFind(searchKey, 0, nElems - 1);   }   private int recFind(long searchKey, int lowerBound, int upperBound) {     int curIn;     curIn = (lowerBound + upperBound) / 2;     if (a[curIn] == searchKey)       return curIn; // found it     else if (lowerBound > upperBound)       return nElems; // can't find it     else // divide range     {       if (a[curIn] < searchKey) // in upper half         return recFind(searchKey, curIn + 1, upperBound);       else         // in lower half         return recFind(searchKey, lowerBound, curIn - 1);     }   }   public void insert(long value) {     int j;     for (j = 0; j < nElems; j++)       // find where it goes       if (a[j] > value) // (linear search)         break;     for (int k = nElems; k > j; k--)       // move bigger ones up       a[k] = a[k - 1];     a[j] = value; // insert it     nElems++; // increment size   }   public void display() {     for (int j = 0; j < nElems; j++)       System.out.print(a[j] + " ");      System.out.println("");   }   public static void main(String[] args) {     int maxSize = 100;      BinarySearchArray arr = new BinarySearchArray(maxSize);      arr.insert(12);      arr.insert(20);     arr.insert(35);     arr.insert(426);     arr.insert(54);     arr.insert(69);     arr.insert(744);     arr.insert(87);     arr.insert(895);     arr.insert(89);     arr.insert(8);     arr.insert(208);     arr.insert(4);     arr.insert(617);     arr.insert(83);     arr.insert(96);     arr.display(); // display array     int searchKey = 27; // search for item     if (arr.find(searchKey) != arr.size())       System.out.println("Found " + searchKey);     else       System.out.println("Can't find " + searchKey);   } }