折半查找是从中间分,也就是说每一次查找总是一分为二,无论数据大小,很多时候这并不是最合理的做法。
斐波那契查找(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;
}