斐波那契查找

来源:互联网 发布:淘宝企业店铺怎么转让 编辑:程序博客网 时间:2024/05/16 11:33
int F[] = {0,1,1,2,3,5,8,13,21,34};int research2(int*a, int n, int key) {int low = 0,high = n - 1,mid;int k = 0;while (n-1 > F[k]-1)k++;for (int i = n; i < F[k]-1; i++)a[i] = a[n-1];//F[k-1]-1可能大于n,所以做一个补全数组的操作,保证mid=low+F[k-1]-1一定是在补全后的数组范围内                                           while (low <= high) {          ////补全后的数组长度其实就是F[k]-1   ( F[k]-1=F[k-1]-1 + F[k-2]-1   + 1 )mid = low + F[k - 1] - 1;if (key < a[mid]) {high = mid - 1;k = k - 1;}else if (key>a[mid]) {low = mid + 1;k = k - 2;}else {if (mid <n)return mid;elsereturn n-1;}}return -1;}

1 0
原创粉丝点击