斐波那契查找



int F[10];


//斐波那契查找
int Fibonacci_Search(int *a, int n, int key)
{
int low, high, mid, 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;//最高下标调整到分隔下标mid-1处
k = k - 1;//斐波那契数列下标减一位
}
else if (key > a[mid])//如果查找记录大于当前分隔记录
{
low = mid + 1;//最低下标调整到分隔下标mid+1处
k = k - 2;//斐波那契数列下标减两位
}
else
{
if (mid == n)
return mid;//相等了就说明mid是要查找到的位置
else
return n;
}
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值