假設有一個數組 { 12, 23, 34, 45, 56, 67, 77, 89, 90 },現要求採用二分法找出指定的數值並將其在數組的索引返回,若是沒有找到則返回 -1。代碼以下:數組
package cn.sunzn.dichotomy; public class DichotomySearch { public static void main(String[] args) { int[] arr = new int[] { 12, 23, 34, 45, 56, 67, 77, 89, 90 }; System.out.println(search(arr, 12)); System.out.println(search(arr, 45)); System.out.println(search(arr, 67)); System.out.println(search(arr, 89)); System.out.println(search(arr, 99)); } public static int search(int[] arr, int key) { int start = 0; int end = arr.length - 1;
// 將開始和結束的下標進行比較,若是不一致則遍歷下一個 while (start <= end) {
// 取到中間的下標 int middle = (start + end) / 2;
// 若是須要計算下標的 數組值比中間下標的數組值小,則在數組前一半中進行查找,即 將結束值-1 if (key < arr[middle]) { end = middle - 1;
// 若是須要計算的值比中間值大,則在數組後半段查找,即將開始值+1 } else if (key > arr[middle]) { start = middle + 1;
// 依次遍歷後,根據開始和結束的值依次變化後查找到最終的須要計算下標值的數組下標 } else { return middle; } } return -1; } }