查找算法(II)二分法查找
阿新 • • 發佈:2018-02-04
== void 效率 strong 根據 test 屬於 算法 ear
二分法查找:要求元素必須是有序的,如果是無序的則要先進行排序操作
基本思想:也稱為是折半查找,屬於有序查找算法。用給定值k先與中間結點的關鍵字比較,中間結點把線形表分成兩個子表,若相等則查找成功;若不相等,再根據k與該中間結點關鍵字的比較結果確定下一步查找哪個子表,這樣遞歸進行,直到查找到或查找結束發現表中沒有這樣的結點。
復雜度分析:最壞情況下,關鍵詞比較次數為log2(n+1),且期望時間復雜度為O(log2n);
註:折半查找的前提條件是需要有序表順序存儲,對於靜態查找表,一次排序後不再變化,折半查找能得到不錯的效率。但對於需要頻繁執行插入或刪除操作的數據集來說,維護有序的排序會帶來不小的工作量,那就不建議使用
package com.yyx.searchAlgorithm; import java.util.Arrays; /** * 二分法查找 yyx 2018年2月3日 */ public class BinarySearch { public static void main(String[] args) { int[] arr = {35, 23, 46, 32, 67, 87 }; // 數組排序 Arrays.sort(arr); System.out.println(Arrays.toString(arr));int value = 32; int index = testSearch(arr, value, arr.length); if (index == -1) { System.out.println("沒有查找到元素"); } else { System.out.println("查找元素的索引為:" + index); } } public static int testSearch(int[] arr, int value, int n) {int low = 0; int high = n - 1; int mid; while (low <= high) { mid = (low + high) / 2; if (arr[mid] == value) { return mid; } if (arr[mid] > value) { high = mid - 1; } if (arr[mid] < value) { low = mid + 1; } } return -1; } }
查找算法(II)二分法查找