二分查找的递归算法:
public class BS { public static void main(String[] args) { int[] arr = new int[10]; for (int i = 0; i < arr.length; i++) { arr[i] = (int)(Math.random()*100); } printArray(arr); printArray(arr); arr = new int[]{3 , 11 , 17 , 31 , 45 , 46 , 68 , 71 , 77 , 91}; // int pos = binarySearch(arr, 0,arr.length - 1,3); int pos = NonCurBinSearch(arr,3); System.out.println(pos); } public static void printArray(int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " , "); } System.out.println(); } public static int binarySearch(int[] arr, int begin, int end, int num) { int middle = (begin + end) / 2; if (arr[middle] == num ) return middle; if(begin >= end) return -1; if (arr[middle] > num) return binarySearch(arr, begin, middle -1, num); else return binarySearch(arr, middle + 1, end, num); } public static int NonCurBinSearch(int[] arr, int key) { int begin = 0; int end = arr.length - 1; while (begin <= end) { int middle = (begin + end) / 2; if (arr[middle] == key) return middle; if (key > arr[middle]) { begin = middle + 1; } else { end = middle -1; } } return -1; } public static int BinSearch(int Array[],int low,int high,int key) { if (low<=high) { int mid = (low+high)/2; if(key == Array[mid]) return mid; else if(key<Array[mid]) //移动low和high return BinSearch(Array,low,mid-1,key); else /*if(key>Array[mid])*/ return BinSearch(Array,mid+1,high,key); } else return -1; } }