順序表查詢之二分查詢

2021-07-03 20:40:15 字數 913 閱讀 1111

二分查詢使用前提:

1、線性表中的記錄必須是關鍵碼有序(一般由大到小)

2、線性表必須採用順序儲存

3、有序儲存的順序表是靜態查詢表,即不需要頻繁的執行插入或者刪除操作

時間複雜度:o(logn)

#include #include using namespace std;

int binary_search(int *a, int n, int key)

else if (key < a[mid])

else

}if (low > high) }

int _tmain(int argc, _tchar* argv)

二分查詢中,根據割點選擇方法的不同,有三種常見的演算法,分別是:折半查詢、差值查詢和斐波那契查詢。三種演算法中,因為折半查詢和差值查詢的差異最小,所以我們將兩者放在一起描述,斐波那契查詢以後再單獨描述。上述**中,當分割位置mid用:mid = (low + high) / 2(即:mid = low + 0.5(high - low))確定時,就是折半查詢;當mid用:mid = low + (key - a[low]) / (a[high] - a[low]) * (high - low)確定時,就是差值查詢。

所謂差值查詢(interpolation search),核心在於要根據所要查詢的關鍵字key與查詢表中最大最小記錄的關鍵字進行比較,其核心在於插值的計算公式:(key - a[low]) /(a[high] - a[low]) 。其時間複雜度也是o(logn)。那麼我們為什麼要使用差值查詢?舉個例子,如果我們要在取值範圍0~1000之間100個元素從小到大均勻分布的陣列中查詢5,我們當然不會從中間開始查起,我們當然會考慮從陣列下標較小的開始查詢。因此,對於那些表長較大,而且關鍵字分布又比較均勻的查詢表來說,差值查詢的平均效能要比折半查詢好得多。

查詢之二分查詢

二分查詢前提查詢的序列需要有序 十分好理解 取中間值與目標值對比查詢 注意下數值邊界 public static void main string args int arr2 int arr3 int index binarysearch arr,34 int index2 binarysearch...

順序查詢 二分查詢

順序查詢 適用範圍 沒有進行排序的資料序列 缺點 速度非常慢,效率為o n cpp view plain copy 在code上檢視 片派生到我的 片 實現 template type sequencesearch type begin,type end,const type searchvalue...

查詢演算法之 二分查詢

這個例項給出了二叉搜尋演算法在9個元素的陣列arr中查詢某個目標值的過程01 2345 678 7 35812 1623 3355 例子1 查詢目標值2301 2345 678 7 35812 1623 3355 步驟1 索引範圍 0,9 索引first 0,last 9,mid 0 9 2 4 t...