二分查詢 插值查詢 斐波那契查詢

2021-08-23 14:32:16 字數 1657 閱讀 6543

在有序表中,取中間記錄作為比較物件,將其與給定值相比較,若其等於給定值,則查詢成功;若其小於給定值,則在中間記錄的右半區繼續查詢;若其大於給定值,則在中間記錄的左半區繼續查詢。不斷重複以上過程,直到查詢成功或無匹配記錄。

使用該查詢方法的前提條件在於,線性表中的資料必須有序,且必須採用順序儲存的方式。

var array = [1,2,3,4,5,6,7,8,9]

function search(value)else

if (array[mid] < value)else

}if (array[mid] === value) return mid;

return -1;

}console.log('查詢3',search(3));

console.log('查詢8',search(8));

console.log('查詢10',search(10));

插值查詢與二分查詢的原理類似,區別就在於mid值的選取。

在插值查詢中,mid = low + ( (key - a[low]) / (a[high] - a[low]) ) * (high - low)。該演算法對錶長較大,而關鍵字分布比較均勻的情況下,效能較高,而對於分布不均勻的資料,則不太適用。

var array = [1,2,3,4,5,6,7,8,9]

function search(value)else

if (array[mid] < value)else

}if (array[mid] === value) return mid;

return -1;

}

顧名思義,該查詢方法利用了斐波那契數列,該方法的主要思路為,先在斐波那契數列f中找到第k項,使其滿足,f[k]-1 > 有序陣列的最大索引號 > f[k-1]-1,然後將陣列擴充到長度為f[k]-1,並使擴充項的值都等於有序陣列的最後一項。

分割點的索引為mid = low + f[k-1]-1,此時有序陣列被mid劃分為兩段,左段長度為f[k-1]-1,右段長度為f[k-2]-1。若查詢值大於mid值,則low等於mid+1,而k = k - 2;若查詢值小於mid,則high = mid -1,k =k -1.

二分查詢,插值查詢,斐波那契查詢

二分查詢,插值查詢,斐波那契查詢 1.二分查詢 偽 while left else if key arr left index 2 then right left right 2 else left left right 2 end 示例 public int midsearch listarr,i...

順序查詢 二分查詢,斐波那契查詢,插值查詢

include include include using namespace std void printerr else if arr mid ele else return 1 void print int i else if len 2 else if len 3 else if len 3...

有序表查詢(二分查詢,插值查詢,斐波那契查詢)

1.二分查詢 二分查詢非遞迴 int binary search1 int num,int len,int target return 1 二分查詢遞迴 int binary search2 int num,int low,int hight,int target return 1 2.插值查詢 插...