查找之斐波那契查找详解

折半查找是从中间分,也就是说每一次查找总是一分为二,无论数据大小,很多时候这并不是最合理的做法。
斐波那契查找(Fibonacci Search),利用黄金分割的思想

#include<stdio.h>
int Fibonacci_search(int *a,int n,int key )
{
    int low ,high, i,k;
    low=1;//定义最低下标为首位 
    high=n;//定义最高下标为记录末位
	k=0;
	while(n>F[k]-1)//计算 n位于 斐波那契数列的 位置
	 k++;
	 for(i=n;i<f[k]-1;i++)//将不满的数值补全。 
	 	a[i]=a[n];
	 while(low<=high)
	 {
	   mid=low +F[k-1]-1;//计算当前分割的下标
	   if(key<a[mid]) {
	   high=mid-1;
	   k=k-1;
	   }else if(k>a[mid])
	   {
	   low=mid+1;
	   k=k-2;//斐波那契数列下标减两位 
	   }else{
	   	if(mid<=n){
	   		return mid;//若相等则说明mid 即为查找到的位置 
		   }else{
		   	return n;//若mid>n 则说明是补全数值,返回 n; 
		   }
	   	
	   }
	   
	 }
	  
	return 0;
	
	
	 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值