演算法(第4版)——二分查詢
阿新 • • 發佈:2018-12-10
從今天開始使用CSDN記錄學習過程,先把之前看過的內容補上。
基本概念
首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。
——百度百科
程式碼實現
演算法(第四版)上的二分查詢使用的是遞迴實現,我這裡使用迭代來實現。
用例測試結果
/** * 二分查詢法 */ public class BinarySearch { /** * @param nums 被查詢陣列 * @param target 被查詢整數 * @return 返回查詢到的數的索引,如果沒找到返回-1. */ public static int search(int[] nums, int target) { int N = nums.length; int first = 0; //陣列起點 int last = N - 1; //陣列終點 int mid = (first + last) / 2; while (first < last) { if (target > nums[mid]) { first = mid + 1; mid = (first + last) / 2; } else if (target < nums[mid]) { last = mid; mid = (first + last) / 2; } else { return mid; } } return -1; } public static void main(String[] args) { int[] nums = {0,3,45,89,132}; int target = 89; int re = search(nums, target); if (re > -1) { System.out.println("找到了" + re); } else { System.out.println("沒找到"); } } }
總結
二分查詢也稱折半查詢(Binary Search),它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。它的時間複雜度為O(log2N),空間複雜度為O(1)。