插值查詢演算法(有序陣列)
插值查詢原理介紹: 插值查詢演算法類似於二分查詢,不同的是插值查詢每次從自適應 mid 處開始查詢。
將折半查詢中的求 mid 索引的公式 , low 表示左邊索引 left, high 表示右邊索引 right. key 就是前面我們講的 findval
int mid = low + (high - low) * (key - arr[low]) / (arr[high] - arr[low]) ;/插值索引/
對應前面的**公式:
int mid = left + (right – left) * (findval – arr[left]) / (arr[right] – arr[left]) 4) 舉例說明插值查詢演算法 1-100 的陣列
插值查詢注意事項:
對於資料量較大,關鍵字分布比較均勻的查詢表來說,採用插值查詢, 速度較快.
關鍵字分布不均勻的情況下,該方法不一定比折半查詢要好
插值查詢應用案例:
請對乙個有序陣列進行插值查詢 ,輸入乙個數看看該陣列是否存在此數,並且求出下 標,如果沒有就提示"沒有這個數"。
**實現:
package com.atguigu.search;
/* 二分(折半)查詢條件:有序陣列。
* * */
public
class
binarysearch
;//不考慮有重複元素的查詢。
int index =
insertvaluesearch
(arr,
0,arr.length-1,
26);
system.out.
println
(index);}
public
static
intinsertvaluesearch
(int
arr,
int left,
int right,
int findval)
// 求出mid, 自適應
int mid = left +
(right - left)
*(findval - arr[left])/
(arr[right]
- arr[left]);
int midval = arr[mid];if
(findval > midval)
else
if(findval < midval)
else
}}
插值查詢演算法
插值查詢演算法是基於二分查詢演算法的,只是在查詢的過程中計算middle的方式有所改變,比如一組可以通過二分查詢演算法計算出的nmid索引的值,是這樣子計算的 nmid nlow nhigh 2,但是插值查詢演算法是根據比率算出的,nmid nlow key narr nlow narr nhigh...
插值查詢演算法
在均勻分布的有序數列中,會比二分查詢次數少很多 思想跟二分查詢一直,都是找到其中乙個值,小了往左找,大了往右找 區別是 也跟二分查詢差不多,就公式不同,不過因為公式複雜了一些,需要一些判斷條件來保證它的正確性 public static int binarysearch int arr,int ke...
插值查詢演算法
插值查詢演算法 mid left right 2 left right left 2 mid left right left findval arr left arr right arr left public class insertvaluesearch int i insertvaluesea...