一、C 程序实现、
/******************************************************************************************* *Description 斐波那契查找算法 *Author liaoxiongxiong *Version 1.0 *Time 2018-06-28 *******************************************************************************************/ #include <stdio.h> const int max_size=20;//斐波那契数组的长度 //生成斐波那契数列 void Fibonacci(int *f) { int i; f[0] = 0; f[1] = 1; for(int i=2; i<max_size; i++) f[i] = f[i-1] + f[i-2]; } //斐波那契查找 int FibonacciSearch(int a[], int value, int n) { int i; int low = 0; int high = n-1; int mid = 0; int k = 0; int F[max_size]; Fibonacci(F);//构造一个斐波那契数组F while(n > F[k] - 1) k++; for(i=n; i<F[k]-1; i++)//把数组补全 a[i] = a[high]; while(low <= high) { mid = low + F[k-1] -1;//根据斐波那契数列进行黄金分割 if(a[mid]>value) { high = mid-1; k = k-1; } else if(a[mid]<value) { low = mid+1; k = k-2; } else { if(mid <= high)//如果为真则找到相应的位置 return mid; else return -1; } } } //测试用例 int main() { int a[]={0,1,2,3,4,5,6,7,8,9}; int len = sizeof(a)/sizeof(a[0]); int x = 2; // 需要查找的元素 int i = FibonacciSearch(a, x, len-1); if(i!=-1) printf("元素 %d 在第 %d 个位置\n",x,i+1); else printf("没有找到元素:%d\n",x); return 0; }
运行结果: