二分查詢法:也稱折半查詢法,是一種效率較高的查詢方法,存在一定的侷限性。
侷限性:適用於有序陣列、有序鍊錶等查詢,例如:array,list。
基本原理:
第一步:設定需要查詢的元素key,再設定low和high兩個臨時指標分別指向左邊第乙個元素和右邊最後乙個元素。
第二步:因為資料是有序的,先根據low和high計算出資料的中位數mid,把資料分割成左右兩部分,左邊部分資料都是小於中位數,右邊部分資料都是大於中位數的。
第三步:判斷key是大於還是小於mid。如果key>mid,先移動low指標到(mid+1)的位置,再根據low和high重新計算中位數。如果key第四步:不斷重複比較key和mid的大小,再移動low或high指標,重新計算資料的中位數,直到查詢到key或迴圈停止。
演算法步驟**:
源資料為:int nums = ;
第一步:設定key=10、左指標low=0、右指標high=(nums.length-1)=7。
第二步:根據low=0和high=7計算資料的中位數mid=3,中位數值為nums[3]=4,再比較key和中位數的大小。
第三步:判斷10>4、把low移動到(mid+1)的位置。再根據low=4和high=7計算資料的中位數mid=5,中位數值為num[5]=7,再比較key和中位數的大小。
第四步:判斷10>7,把low移動到(mid+1)的位置。再根據low=6和high=7計算資料的中位數mid=6,中位數值為nums[6]=10,再比較key和中位數的大小。
第五步:判斷10=10,說明查詢到元素了,直接終止計算並返回元素下標。
中位數計算方式:
方式一:int mid = (low+high)/2; // (low+high)可能會超過int的最大值,導致整型溢位。
方式二:int mid = low + ((high-low)>>1); // 也可能出現問題。
/**
* 二分法查詢(折半查詢法)
* @param nums
* @param key
* @return
*/public static int binarysearch(int nums, int key)
int low = 0; // 起始位置
int high = nums.length-1; // 結束位置
二分查詢法(折半查詢法)
二分查詢法 說明 如果搜尋的數列已經有排序,應該盡量利用它們已排序的特性,以減少搜尋比對的次數 這是搜尋的基本原則,二分搜尋法是這個基本原則的代表。解法 在二分搜尋法中,從數列的中間開始搜尋,如果這個數小於我們所搜尋的數,由於數列已排序,則該數左邊的數一定都小於要搜尋 的物件,所以無需浪費時間在左邊...
二分查詢法(折半查詢法)
二分查詢用法 1 二分查詢要求 2 什麼時候使用二分查詢當在乙個有序list中,需要查詢乙個值,而這個值不確定在什麼位置時,使用該演算法可以通過極少的查詢次數得到結果 而使用簡單查詢,如果這個值在list的最後出現就需要查詢列表長度的次數才可以查到。也就是說,對於包含n個元素的列表,用二分查詢最多需...
折半查詢法(二分查詢法)
一.舉例 二.演算法時間複雜度 假設一共有n個元素 第一次折半元素個數變為n 2 第二次折半元素個數變為n 4 第三次折半元素個數變為n 8 第k次折半元素個數變為n 2 k 假設k次找到,即為n 2 k 1 k log2 n 三.函式實現 define crt secure no warnings...