查詢 之有序表查詢

2021-10-02 11:31:41 字數 1544 閱讀 7437

折半查詢/二分法查詢

其中線性表採用的是順序儲存

//c

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

return 0;

}

演算法複雜度分析時間複雜度:o(log(n))  每次劃分為一半 故 2^x=n  則x=log2(n)

空間複雜度:o(1)

插值查詢

二分法查詢mid=(low+high)/2=low+1/2(high-low)

其中的1/2修改為(key-a[low])/(a[high]-a[low])

mid=low+(key-a[low])/(a[high]-a[low])(high-low)

依據查詢的關鍵字key和查詢表中最大最小關鍵字比較後的查詢方法

表長較大,關鍵字分布比較均勻的查詢表,效果比二分法好

斐波那契查詢

斐波那契數列

採用了**分割點而不是一分為二

斐波那契數列 f=

a為待查詢的陣列,例如:a=

n=10為陣列的長度

假設查詢的key=59

步驟:

1)邊界確定

2)待查陣列按照斐波那契數列擴充

3)迴圈的判斷為low<=high

其中的high為原來的待查陣列長度,為什麼不是擴充後的長度,原因是擴充後的值都是重複原來待查陣列的末尾值,在low>n之前已經找到查詢的值,否則找不到

那麼擴充待查陣列長度的目的是:防止查詢後半部分的數時沒有值

4)查詢過程

待查陣列:元素f(k)-1個,因為已經從原來的n個擴充為f(k)-1個

分割點劃分:

由斐波那契數列的特性:f[k]=f[k-1]+f[k-2],構建如下的劃分

這張圖里的high是擴充的f(k)-1而不是n

//c

/*構造乙個斐波那契陣列*/

void fibonacci(int * f)

else

}return -1;

}

時間複雜度: o(logn)

空間複雜度: o(n)  斐波那契數列的建立

可參考:

斐波那契查詢原理詳解與實現

《大話資料結構》

查詢 有序表查詢

1 折半查詢 折半查詢又稱二分查詢,時間複雜度為 2 插值查詢 插值查詢是另一種有序表查詢演算法,其核心就在於插值公式 3 斐波那契查詢 4 三種有序表查詢演算法比較 三種有序表查詢本質上是分隔點的選擇不同,折半查詢分隔點是 折半查詢進行加法和除法運算 mid low high 2 插值查詢進行複雜...

七大查詢演算法之有序表查詢 斐波那契查詢

比例又稱 分割,是指事物各部分間一定的數學比例關係,即將整體一分為二,較大部分與較小部分之比等於整體與較大部分之比,其比值約為1 0.618或1.618 1。斐波那契查詢也是二分查詢的一種提公升演算法,通過運用 比例的概念在數列中選擇查詢點進行查詢,提高查詢效率。同樣地,斐波那契查詢也屬於一種有序查...

有序表查詢

順序表查詢法,簡單但是不智慧型。1.折半查詢法 binary search 如果線性表在排序是有序的 這種情況下我們才用順序儲存。折半查詢法 int binarysearch int a,int n,int key else return mid return 1 表示失敗 折半查詢法類似於把靜態有...