本文主要是介绍斐波纳查找,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
步骤:
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;
}
这篇关于斐波纳查找的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!