二分查詢(Java實現)
阿新 • • 發佈:2018-12-10
二分查詢又稱為折半查詢,要求線性表必須採用順序儲存結構,並且元素按關鍵字有序排列。
查詢過程:假設陣列中元素按升序排列,將陣列中間位置的值與待查值比較,如果相等則查詢成功;否則利用中間位置下標將陣列分成前後兩個子陣列,如果中間位置的值大於待查值則到前一子陣列中查詢,如果中間位置的值小於待查值則到後一子陣列中查詢。重複以上步驟,直到找到或查完陣列所有元素(未找到)。時間複雜度O(logN)。
Java程式碼如下:
public static int binarySearch(int key, int[] a){ int low = 0; int high = a.length - 1; while(low <= high){ int mid = low + (high - low) / 2; if(key < a[mid]){ high = mid - 1; }else if(key > a[mid]){ low = mid + 1; }else{ return mid; } } return -1;//沒找到 }
二分查詢的遞迴實現
public static int binarySearch(int key, int[] a){ return rec(key, a, 0, a.length - 1); } private static int rec(int key, int[] a, int low, int high){ if(low > high){ return -1; } int mid = low + (high - low) / 2; if(key < a[mid]){ return rec(key, a, low, mid - 1); }else if(key > a[mid]){ return rec(key, a, mid + 1, high); }else{ return mid; } }