// 斐波那契查詢.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 範圍內查詢。與二分查詢相比,斐波那契查詢演算法 的明顯優點在...