斐波那契查找

来源:互联网 发布:利笠分析知乎lilium 编辑:程序博客网 时间:2024/05/06 15:36

斐波那契查找

/*斐波那契查找的主要思想是:利用斐波那契数列进行下表分割。F(k)=F(k-1)+F(k-2)那么:F(k)-1=F[k-1]-1+F[k-2]也即有:F[k]-1=F[k-1]-1+1(mid,中间数)+F[k-2]-1;*/#include<cstdio>#define MAX 1000int F[]={0,1,1,2,3,5,8,13,21,34};//全局数组int Fibonacci_Search(int *a,int n,int key){int low,mid,high,i,k;low=1;high=n;k=0;while(n>F[k])//计算n位于斐波那契数列的位置k++;for(i=n;i<F[k]-1;i++)//将不满的数值补上a[i]=a[n];while(low<=high){mid=low+F[k]-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;//mid即为找到的位置else return n;//说明是补全的数值,返回n}}return 0;}int main(int argc,char *argv[]){int Array[MAX];int n,key;int i,index;scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d",&Array[i]);scanf("%d",&key);index=Fibonacci_Search(Array,n,key);if(index==n||index==0)printf("Can not find!\n");elseprintf("Find it,index is: %d\n",index);return 0;}


1 0
原创粉丝点击