斐波那契查詢(超詳解)

2021-07-03 00:13:20 字數 1410 閱讀 2820

// 斐波那契查詢.cpp    

#include 

#include

using namespace std;  

const int max_size=20;//斐波那契陣列的長度  

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

void fibonacci(int * f)  

else  

}    

/*斐波那契查詢方法的核心**就是上面一段

原理:1)當key=a[mid]時,查詢成功;

2)當keya[mid]時,新的查詢範圍是第mid+1個到第high個,此時範圍個數為f[k-2] - 1個,即陣列右邊的長度,

所以要在[f[k - 2] - 1]範圍內查詢。

4)    對於二分查詢,分割是從mid= (low+high)/2開始;而對於斐波那契查詢,分割是從mid = low + f[k-1] - 1開始的;

通過上面知道了,陣列a現在的元素個數為f[k]-1個,即陣列長為f[k]-1,mid把陣列分成了左右兩部分,

左邊的長度為:f[k-1] - 1, 那麼右邊的長度就為(陣列長-左邊的長度-1),

即:(f[k]-1) - (f[k-1] - 1) = f[k] - f[k-1] - 1 = f[k-2] - 1。  

*/delete temp;  //釋放new出來的記憶體,因為是陣列,所以才去delete temp的方式而不是delete temp.

return -1;  

}  int main()  

; int a= ;

int key=21;  

int index=fibonacci_search(a,sizeof(a)/sizeof(int),key);  

/*這裡插入討論一下陣列的長度問題:

1、char a=""型別的字串,編譯器會在結尾自動新增\0,用sizeof計算會算上'\0'

2、存在的c語言方法,如strlen(s),計算字串的長度,其中s指標。strlen要計算字串長度,

必須知道**是結尾,因此使用\0表示結尾。只有字元陣列才有\0的概念,其它型別(int)的陣列沒有這個概念。

如int a={} 知道陣列長度使用sizeof(a)/sizeof(int);

3、那麼問題來了char a={}這種型別的字串,用用sizeof計算會不會算上'\0'?

答案是不會的。

*/cout《與二分查詢比較:

①斐波那契查詢的平均效能比折半查詢好,②但最壞情況下效能卻比折半查詢差,③它還有乙個優點就是分割時只需進行加減運算。"

與二分查詢相比,斐波那契查詢演算法的明顯優點在於它只涉及加法和減法運算,而不用除法。

因為除法比加減法要占去更多的機時,因此,斐波那契查詢的平均效能要比折半查詢好。  

*/

斐波那契查詢(超詳解)

斐波那契查詢.cpp include include using namespace std const int max size 20 斐波那契陣列的長度 構造乙個斐波那契陣列 void fibonacci int f 定義斐波那契查詢法 int fibonacci search int a,in...

斐波那契查詢詳解

斐波那契查詢的 前提是待查詢的查詢表必須順序儲存並且有序。相對於折半查詢,一般將待比較的key值與第mid low high 2位置的元素比較,比較結果分三種情況 1 相等,mid位置的元素即為所求 2 low mid 1 3 high mid 1 斐波那契查詢與折半查詢很相似,他是根據斐波那契序列...

斐波那契查詢

斐波那契查詢 斐波那契查詢的核心是 1 當key a mid 時,查詢成功 2 當key 3 當key a mid 時,新的查詢範圍是第mid 1個到第high個,此時範圍個數為f k 2 1個,即陣列右邊的長度,所以要在 f k 2 1 範圍內查詢。與二分查詢相比,斐波那契查詢演算法 的明顯優點在...