问题引入

费氏数列即斐波那契数列。

斐波那契数列,又称黄金分割数列,数列形式为:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368……在数学上,斐波纳契数列根据以下递归方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)。数列的特点为:(1)从第3项开始,每一项都等于前两项之和。(2)第0项是0,第1项是第一个1。

费氏查找即利用费氏数列(斐波那契数列)作为间隔查找元素(确定下一元素的位置),通过划分区间加快区间收敛的速度,提高查找效率,时间复杂度为O(logn)。

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 15
#define SWAP(x,y) {int t; t = x; x = y; y = t;} //元素交换 void createfib(void);
int findx(int, int);
int fibsearch(int[], int);
void quicksort(int[], int, int);
int Fib[MAX] = {-999};int main() {int number[MAX] = {0}; int i, find;srand(time(NULL));for(i = 1; i <= MAX; i++){ number[i] = rand() % 100;}quicksort(number, 1, MAX); printf("查找对象数列为:");for(i = 1; i <= MAX; i++) printf("%d ", number[i]);printf("\n\n输入寻找对象:"); scanf("%d", &find);if((i = fibsearch(number, find)) >= 0) printf("\n数字 %d 在第 %d 个位置。",find,i);else printf("\n找不到指定数");printf("\n");return 0;
}// 建立费氏数列
void createfib() { int i;Fib[0] = 0;Fib[1] = 1;for(i = 2; i < MAX; i++) Fib[i] = Fib[i-1] + Fib[i-2];
}//找x值
int findx(int n, int find){ int i = 0;while(Fib[i] <= n) i++;i--;return i;
}//查找
int fibsearch(int number[], int find){ int i, x, m;createfib();x    = findx(MAX+1,find); m = MAX - Fib[x];x--;i = x;if(number[i] < find) i += m;while(Fib[x] > 0){ if(number[i] < find) i += Fib[--x];else if(number[i] > find) i -= Fib[--x];else return i;}return -1;
}void quicksort(int number[], int left, int right) { int i, j, k, s;if(left < right) {s = number[(left+right)/2]; i = left - 1;j = right + 1;while(1) {while(number[++i] < s) ;    // 向右找while(number[--j] > s) ;   // 向左找 if(i >= j) break;SWAP(number[i], number[j]);//交换元素 }quicksort(number, left, i-1);    // 对左边进行递回quicksort(number, j+1, right);   // 对右边进行递回}
}

运行结果

C实现 费氏查找算法相关推荐

  1. 算法--兔子生兔子的问题(费氏数列)

    #include <stdio.h> int Fib( int n ) {// 说明// Fibonacci 为 1200 年代的欧洲数学家 , 在他的着作中曾经提到 : 「若有一只免子每 ...

  2. 【我的区块链之路】- golang实现主流查找算法

    [转载请标明出处]https://blog.csdn.net/qq_25870633/article/details/82705217 查找算法相信各位大佬都不是很陌生吧!很多时候我们需要快速的从某些 ...

  3. 查找算法实现【C语言实现】

    目录 1. 线性(顺序)查找法 2. 二分查找算法 3. 插值查找算法 4. 分块查找算法 1. 线性(顺序)查找法 查找算法是指:从一些数据之中,找到一个特殊的数据的实现方法.查找算法与遍历有极高的 ...

  4. 数据结构——四大查找算法(工作必备)

    在java中,常用的查找有四种 顺序(线性)查找 二分查找折半查找 插值查找 斐波那契查找 目录 1. 线性查找 2. 二分查找 3. 插值查找 4. 斐波那契查找 1. 线性查找 线性查找是逐一比对 ...

  5. java快速查找算法_Java实现的快速查找算法示例

    本文实例讲述了Java实现的快速查找算法.分享给大家供大家参考,具体如下: 快速查找算法,可以根据想要找的是第几个大的数,每次循环都能固定下来一个数在数组完整排完序之后的位置,每次循环都能定一个数的位 ...

  6. java 二分搜索获得大于目标数的第一位_程序员常用查找算法(顺序、二分、插值、分块、斐波那契)...

    顺序查找 基本思想 属于线性查找和无序查找,从一端开始顺序扫描,直到找到与目标值value相等的元素. 这是最基本的查找方法,也是时间复杂度最高的查找算法. 在数据过多时,这种方法并不适用. 代码实现 ...

  7. 二分查找算法的一点改进

    在计算机科学中,二分查找,是一种在有序数组中查找某一特定元素的搜索算法.这种搜索算法每一次比较都使搜索范围减半.第一篇二分查找的论文发表于1946年,然而第一个没有bug的二分查找算法却是在1962年 ...

  8. python二分法查找算法_顺序查找算法和折半(二分法)查找算法,C语言查找算法详解...

    查找是指在大量的信息中寻找一个特定的信息.在计算机中,查找是非常重要的一个应用,比如"百度".查找算法的好坏直接影响查找的速度. 常用的查找算法主要有顺序查找和折半(二分法)查找: ...

  9. php查找二维数组下标,PHP实现二维数组中的查找算法小结

    本文实例讲述了PHP实现二维数组中的查找算法.分享给大家供大家参考,具体如下: 方法1:silu从左下角最后一行的第一个元素开始,遍历.如果小于target 则遍历该行的所有元素,找到结束.如果大于继 ...

最新文章

  1. byte数组穿换成pcm格式_Apache Arrow:一种适合异构大数据系统的内存列存数据格式标准...
  2. Nature:拟南芥微生物组功能研究
  3. 如何让springboot中的某些html文件不经过thymeleaf模板解析?
  4. 对话系统(二)-普通神经网络
  5. 什么是 Webpack?【Webpack Book 翻译】
  6. 【mysql】【windows】MySQL 服务无法启动,服务没有报告任何错误,请键入 NET HELPMSG 3534 以获得更多的帮助。...
  7. 13.设计模式--外观模式(Facade模式)
  8. 使用uTools快捷地图片转文字
  9. R统计-PCA/PCoA/db-RDA/NMDS/CA/CCA/DCA等排序分析教程
  10. 微信添加好友查找失败服务器繁忙,微信加载联系人失败_微信添加好友失败有哪些原因...
  11. html5简单在线绘图,html5实现一个简单的在线画板
  12. maven 实战 (许晓斌)
  13. 4宫格 android,四宫格拼图软件
  14. php怎么实现网页切图,CSS_网站页面切图与CSS注意事项,一、Web页面切图 1) Web页面的 - phpStudy...
  15. Android基础入门教程——4.1.2 Activity初窥门径
  16. iOS开发之高仿斗鱼tv初探
  17. 服装标准中纰裂试验方法的比较与探讨
  18. Excel甘特图 Gantt Chart
  19. 【阅读笔记】Towards Efficient and Privacy-preserving Federated Deep Learning
  20. 通过一个命令返回上级多层目录的方法

热门文章

  1. Unity最新版打包AssetBundle和加载的方法
  2. java动态心形程序_java swing实现动态心形图案的代码下载
  3. 手机服务器怎么维护,手机维护远程服务器
  4. python画红色等边三角形面积公式_等边三角形面积公式?
  5. 计算机类专业英文缩写,计算机专业英文缩写词汇汇总
  6. linux系统运行MapReduce程序报错:exitCode 127
  7. 步进电机的计算机控制系统设计,基于计算机并口的步进电机控制系统设计
  8. 闲话虚拟仪器开发历史
  9. 企业内部流程运转受阻?免费又高效不愧是它
  10. VirtualBox安装Ubuntu系统过程及问题排查