在有序表中,取中間記錄作為比較物件,將其與給定值相比較,若其等於給定值,則查詢成功;若其小於給定值,則在中間記錄的右半區繼續查詢;若其大於給定值,則在中間記錄的左半區繼續查詢。不斷重複以上過程,直到查詢成功或無匹配記錄。
使用該查詢方法的前提條件在於,線性表中的資料必須有序,且必須採用順序儲存的方式。
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.插值查詢 插...