步骤:
1、查找数值长度在斐波那契数中的位置
2、补全数组
3、查找
#include <stdio.h>
#include <algorithm>
using namespace std;
int main ()
{
int arry[20], i, low, high, mid, k, key;
int f[10];
f[0] = 0;
f[1] = 1;
low = 0;
high = 9;
k = 0;
printf("Enter num:\n");
for(i = 0; i < 8; i++)
{
scanf("%d", &(arry[i]));
f[i+2] = f[i] + f[i+1]; //建立斐波契那数列
}
sort(arry, arry+8); //将数组按照从小到大排序
printf("Enter key:");
scanf("%d", &key);
while(10 > f[k]-1)
{
k++; //查找数组个数在斐波那契数列中的位置
}
for(i = 10; i < f[k]; i++)
{
arry[i] = arry[7]; //补齐数组
}
while(low < high) //查找
{
mid = low + f[k-1]-1;
if(key < arry[mid])
{
high = mid - 1;
k = k-2;
}
else if (key > arry[mid])
{
low = mid + 1;
k = k - 1;
}
else
{
if(mid < 8)
{
printf("The position is: %d\n", mid); //如果mid比数组的个数小,那么mid就是找到的位置
return 0;
}
else
{
printf("The position is: 8\n");
return 0;
}
}
}
printf("NO FIND!\n"); //程序到了这一步,说明没有找到key值
return 0;
}