二分查找也稱折半查找(Binary Search),它是一種效率較高的查找方法。可是,折半查找要求線性表必須採用順序存儲結構,並且表中元素按關鍵字有序排列。java
前面介紹了,很少說數組
首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查找關鍵字比較,若是二者相等,則查找成功;不然利用中間位置記錄將表分紅前、後兩個子表,若是中間位置記錄的關鍵字大於查找關鍵字,則進一步查找前一子表,不然進一步查找後一子表。重複以上過程,直到找到知足條件的記錄,使查找成功,或直到子表不存在爲止,此時查找不成功。spa
來,老夫在畫個圖。這個圖應該是老夫畫的圖裏面的最好的一張圖了code
/** * @param data 待查詢的數組 * @param left 左標 * @param right 右標 * @param value 查找值 * @return */ private static int selectBinarySearch(int[] data, int left, int right, int value) { // 若是輸入的不合法,返回 -1 if (left > right) { return -1; } int middle = (left + right) / 2; if (value < data[middle]) { return selectBinarySearch(data, left, middle, value); } else if (value > data[middle]) { return selectBinarySearch(data, middle, right, value); } else { return middle; } }