#include<iostream>
using namespace std;
int Search_Seq(int arr[],int arr_size,int key)//表数据从1开始到下标处,arr_size表示数组大小
{
int i;
arr[0]=key;
for( i=arr_size-1;i>0;i--)
{
if(arr[i]==key)
{
return i;
}
}
return i;
}
static int F[100];
void initF()
{
F[0]=0;
F[1]=1;
for(int i=2;i<100;i++)
{
F[i]=F[i-1]+F[i-2];
}
}
int Search_Fibonacci(int arr[],int arr_size,int key)
{
int low=0;
int index=0;
while(arr_size>F[index]-1)
{
index++;
}
for(int i=arr_size-1;i<F[index]-1;i++)
{
arr[i]=arr[arr_size-1];
}
int high=F[index]-1-1;
while(low<=high)
{
int mid=low+F[index-1]-1;
if(arr[mid]==key)
{
if(mid<=arr_size-1)
{
return mid;
}
else
{
return -1;
}
}
else if(arr[mid]<key)
{
low =mid+1;
index-=2;
}else if(arr[mid]>key)
{
high=mid-1;
index--;
}
}
return -1;
}
int Search_Seq2(int arr[],int arr_size,int key)
{
arr[0]=key;
int i=arr_size-1;
while(arr[i]!=key)
{
i--;
}
return i;
}
int Search_Binary(int arr[],int arr_size,int key)
{
int low=0;
int high=arr_size-1;
int mid;
while(low<=high)
{
mid=(low+high)/2;
if(arr[mid]==key)return mid;
if(arr[mid]<key)
{
low=mid+1;
}
if(arr[mid]>key)
{
high=mid-1;
}
}
return -1;
}
int main()
{
initF();
int arr[7]={11,44,67,78,89,132,434};
cout<<Search_Fibonacci(arr,7,442);
//cout<<Search_Seq(arr,7,3);
//cout<<Search_Binary(arr,7,4331);
//cout<<Search_Seq2(arr,7,119);
getchar();
}