//斐波那契查找(黄金分割法) ------ 有序数组
vector<int> fib()
{
vector<int>f;
f.push_back(1);
f.push_back(1);
for (int i = 2; i < 20; i++)
{
f.push_back(f[i - 1] + f[i - 2]);
}
for (int i = 0; i < f.size(); i++)
{
cout << f[i] << " ";
}
cout << endl;
return f;
}
int FibonacciSearch(vector<int>arr, int key)
{
int low = 0;
int high = arr.size() - 1;
int k = 0;
int mid = 0;
vector<int>f = fib();
while (high > f[k] - 1)
{
k++;
}
cout <<"k="<< k << endl;
vector<int>temp = arr;
temp.resize(f[k]);
for (int i = high + 1; i < temp.size(); i++)
{
temp[i]=arr[high];
}
for (int i = 0;i < temp.size(); i++)
{
cout << temp[i] << " ";
}
cout << endl;
while (low <= high)
{
mid = low + f[k - 1] - 1;
if (key < temp[mid])
{
high = mid - 1;
k--;
}
else if (key > temp[mid])
{
low = mid + 1;
k-=2;
}
else
{
if (mid <= high)
{
return mid;
}
else
{
return high;
}
}
}
return -1;
}
int main()
{
vector<int>arr = { 1,8,10,89,1000,1234 };
cout << FibonacciSearch(arr, 1234);
system("pause");
return 0;
}