老是搞混了二分查找(BinarySearch)和快速排序(QuickSort ),今天在这里记录下,省得以后在忘记啦。
先记二分查找吧,
public
class
BinarySearch
...
{ // copy from JDK's java.util.Arrays.binarySearch(int[], int) public static int binarySearch( int [] a, int key) ... { int low = 0 ; int high = a.length - 1 ; while (low <= high) ... { int mid = (low + high) >> 1 ; int midVal = a[mid]; if (midVal < key) low = mid + 1 ; else if (midVal > key) high = mid - 1 ; else return mid; // key found } return - (low + 1 ); // key not found. } // <code>to</code> is included public static int recursiveBinarySearch( int [] a, int key, int from, int to) ... { int mid = (from + to) >> 1 ; int midVal = a[mid]; // search left part if (midVal > key && from <= mid - 1 ) ... { return recursiveBinarySearch(a, key, from, mid - 1 ); } // search right part else if (midVal < key && mid + 1 <= to) ... { return recursiveBinarySearch(a, key, mid + 1 , to); } // find key else if (midVal == key) ... { return mid; } // cannot find return - 1 ; } public static void main(String[] args) ... { int [] a = ... { 23 , 35 , 45 , 56 , 78 , 79 , 80 , 90 , 100 } ; int [] b = ... { 23 , 35 , 45 , 56 , 78 , 79 , 80 , 90 , 100 , 1000 } ; System.out.println(binarySearch(a, 80 )); System.out.println(binarySearch(b, 80 )); System.out.println(recursiveBinarySearch(a, 100 , 0 , a.length - 1 )); System.out.println(recursiveBinarySearch(b, 1000 , 0 , b.length - 1 )); } }