插值查詢演算法

2021-10-03 21:08:42 字數 1476 閱讀 5403

插值查詢演算法(有序陣列)

插值查詢原理介紹: 插值查詢演算法類似於二分查詢,不同的是插值查詢每次從自適應 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...