二分搜索法(Binary Search)是一種經常使用的搜索算法,比起冒泡排序和選擇排序來講,二分搜索法的時間效率要更高,爲O(logn)。算法
算法思路:在給出的數組按從小到大排好序的狀況下,先把目標值與中間值比較,若相等,直接返回中間值下標;若目標值小於中間值,則說明目標值在數組的前半段;若目標值大於中間值,則說明目標值在數組的後半段;而後運用遞歸,直至搜索出目標值的位置或搜索整個數組都找不到目標值時才中止。數組
下面我直接給出二分搜索法的代碼:測試
1 class BinarySearch 2 { 3 public static int binarySearch(int num, int l, int r, int array[]){ 4 int mid = (l + r) / 2; 5 if(l > r) return -1; 6 if(l <= r){ //l <= r 是大前提 7 if(num == array[mid]) 8 return mid; //目標值與中間值相等,返回中間值下標 9 else if(num < array[mid]) 10 return binarySearch(num,l,mid-1,array); 11 else if(num > array[mid]) 12 return binarySearch(num,mid+1,r,array); 13 } 14 return -1; //找不到目標值,返回-1 15 } 16 }
測試代碼:spa
1 class Test 2 { 3 public static void main(String[] args) 4 { 5 int [] qwe = {6,12,24,36,42,58,62,70,88,93}; //要先從小到大排序 6 int result = BinarySearch.binarySearch(70,0,qwe.length-1,qwe); 7 System.out.println(result); 8 result = BinarySearch.binarySearch(63,0,qwe.length-1,qwe); 9 System.out.println(result); 10 } 11 }
結果以下:code
對該算法有更好的改進建議請提出!blog