1. 程式人生 > >查找算法(II)二分法查找

查找算法(II)二分法查找

== 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)二分法查找