算法之二分搜索法

二分搜索法(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

相關文章
相關標籤/搜索