Advertisement
scottashipp

BetterBinarySearch.java

Feb 17th, 2014
907
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.72 KB | None | 0 0
  1. import static org.junit.Assert.assertEquals;
  2.  
  3. import org.junit.Test;
  4.  
  5. public class BetterBinarySearch {
  6.  
  7.     public static int rank(char key, char[] a) {
  8.         int mid = -1;
  9.         int hi = a.length - 1;
  10.         int lo = 0;
  11.         while(lo <= hi) {
  12.             System.out.print("Lo: " + lo + "\tHi: " + hi);
  13.             mid = lo + (Math.max(hi, mid) - lo) / 2;
  14.             System.out.println("\tMid: " + mid);
  15.             if (key < a[mid]) {
  16.                 hi = mid - 1;
  17.             }
  18.             else if (key > a[mid]) {
  19.                 lo = mid + 1;
  20.             }
  21.             else return mid;
  22.         }
  23.         return -1;
  24.     }
  25.    
  26.     @Test
  27.     public void testBetterBinarySearch() {
  28.         char[] b = {'a','b','c','d','e'};
  29.         assertEquals(1, rank('b',b));
  30.         assertEquals(3, rank('d',b));
  31.         assertEquals(4, rank('e',b));
  32.         assertEquals(0, rank('a',b));
  33.         assertEquals(-1, rank('0',b));
  34.         assertEquals(-1, rank('f',b));
  35.        
  36.         char[] c = {};
  37.         assertEquals(-1, rank('f',c));
  38.  
  39.         char[] d = {'a'};
  40.         assertEquals(-1, rank('f',d));
  41.         assertEquals(0, rank('a',d));
  42.        
  43.         char[] e = {'a', 'c', 'e', 'g', 'i', 'k', 'm', 'o'};
  44.         assertEquals(-1, rank('d',e));
  45.         assertEquals(2, rank('e',e));
  46.         assertEquals(-1, rank('l',e));
  47.         assertEquals(5, rank('k',e));
  48.         assertEquals(-1, rank('f',e));
  49.     }
  50.    
  51.     public static void main(String[] args) {
  52.         char[] b = {'a','b','c','d','e'};
  53.         System.out.println("Searching for " + 'b');
  54.         int found = rank('b',b);
  55.         System.out.println("\nFound at " + found + "\n");
  56.         System.out.println("Searching for " + 'd');
  57.         found = rank('d',b);
  58.         System.out.println("\nFound at " + found + "\n");
  59.     }
  60.    
  61.    
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement