c语言黄金分割法搜索过程,【大话数据结构C语言】53 斐波那契查找(黄金分割法查找)...
欢迎关注我的公众号是【CodeAllen】,关注回复【1024】获取精品学习资源
程序员技术交流①群:736386324 ,程序员技术交流②群:371394777
和题目一样,这个算法是按照黄金分割法作为原理的
黄金分割就是0.618:1
先看下菲波那切数列
代码实现:
#include
#define MAXSIZE 20
void fibonacci(int *f)
{
int i;
f[0] = 1;
f[1] = 1;
for(i=2; i < MAXSIZE; ++i)
{
f[i] = f[i-2] + f[i-1];
}
}
int fibonacci_search(int *a,int key,int n)
{
int low = 0;
int high = n - 1;
int mid = 0;
int k = 0;
int F[MAXSIZE];
int i;
fibonacci(F);
while( n > F[k]-1 )
{
++k;
}
for( i=n; i < F[k]-1; ++i)
{
a[i] = a[high];
}
while( low <= high )
{
mid = low + F[k-1] - 1;
if( a[mid] > key )
{
high = mid - 1;
k = k - 1;
}
else if( a[mid] < key )
{
low = mid + 1;
k = k - 2;
}
else
{
if( mid <= high )
{
return mid;
}
else
{
return high;
}
}
}
return -1;
}
int main()
{
int a[MAXSIZE] = {1, 5, 15, 22, 25, 31, 39, 42, 47, 49, 59, 68, 88};
int key;
int pos;
printf("请输入要查找的数字:");
scanf("%d", &key);
pos = fibonacci_search(a, key, 13);
if( pos != -1 )
{
printf("\n查找成功,关键字 %d 所在的位置是: %d\n\n", key, pos);
}
else
{
printf("未在数组中找到元素:%d\n\n", key);
}
return 0;
}
c语言黄金分割法搜索过程,【大话数据结构C语言】53 斐波那契查找(黄金分割法查找)...相关推荐
- 算法:斐波那契(黄金分割法)查找算法
斐波那契数列 斐波那契数列,该数列公式为F(K) = F(k-1) + F(k-2),即 1.1.2.3.5.8.13.21--.F(k-1)/f(K)随着K的递增,该数越来越接近黄金分割比例,所以该 ...
- JAVA数据结构与算法之斐波那契查找(黄金分割点)
前言 最近面临毕业就业,在复习数据结构与算法,为了更好地掌握,加深印象,所以决定写一些博客来知识复现. 温馨提示:这篇博客可能不适合刚学数据结构的新手. 算法的简单介绍 黄金分割点是指把一条线段分割为 ...
- 【C语言】案例二十五 兔子数列(斐波那契数列)
案例描述 兔子数列又称斐波那契数列,黄金分割数列,具体描述如下:一对兔子在出生两个月后,每个月都能生出一对小兔子,现有一对刚出生的兔子,假设所有兔子都不死,那么一年后有对少只兔子? 案例分析 n表示月 ...
- 【算法】斐波那契(黄金分割法) 查找算法
文章目录 1.概述 2.非递归查找 1.概述 视频:https://www.bilibili.com/video/BV1E4411H73v?p=83
- 数据结构与算法分析:斐波那契堆
参考 斐波那契堆(二)之 C++的实现 和 斐波那契堆的C++实现,可参考视频 [B站首发]来学斐波那契堆吧♪(^∀^●) 势函数的作用:得到进行一次操作的代价和势函数的变化关系:costi=Δϕ+k ...
- 2.数据结构与算法:斐波那契算法
1.介绍斐波那契数列: 描述:斐波那契数列(Fibonacci sequence),指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.--在数学上,斐波那契数列以如下被以递推的方法定义 ...
- 数据结构与算法--再谈递归与循环(斐波那契数列)
再谈递归与循环 在某些算法中,可能需要重复计算相同的问题,通常我们可以选择用递归或者循环两种方法.递归是一个函数内部的调用这个函数自身.循环则是通过设置计算的初始值以及终止条件,在一个范围内重复运算. ...
- C语言 计算斐波那契数列
C语言 计算斐波那契数列 前言 在学习C语言的道路上多次遇到了求斐波那契数列的问题,今天来总结一下我所知道的几种思想方法. 方法一:循环 使用斐波那契数列的推导式,通过循环将每一个值保存到数组fib中 ...
- C语言 - 递归之青蛙跳台阶详解(这货就是个斐波那契数列)
什么是青蛙跳台阶问题? 一只青蛙可以一次跳 1 级台阶或一次跳 2 级台阶,如果台阶数为n,那么这只青蛙有多少种跳法? 电影<少年班>中有这样一个片段,导师周知庸寻找智力超群的少年时遇到了 ...
- 面试官问你斐波那契数列的时候不要高兴得太早 搞懂C语言函数指针 搜索引擎还可以这么玩? 那些相见恨晚的搜索技巧...
面试官问你斐波那契数列的时候不要高兴得太早 前言 假如面试官让你编写求斐波那契数列的代码时,是不是心中暗喜?不就是递归么,早就会了.如果真这么想,那就危险了. 递归求斐波那契数列 递归,在数学与计算机 ...
最新文章
- elementUI源码修改的爬坑之旅
- twig模板引擎使用php,Twig模板引擎用法入门教程_PHP
- linux开始时间and结束时间,Linux NTP configure and Hangcheck-time
- 计算机Java程序设计标准讲义
- 看到一个有趣的东东。
- cad和python哪个好学_对纯外行人来说,学习PS和Python哪个更容易?
- 结构与算法(04):排序规则与查找算法
- 一篇文章带你吃透 hashmap(面试指南升级版)
- Graphviz 入口
- Python之网络编程(实现一个多用户同时在线的FTP用户管理程序)
- 如何能够快速创建自己的APP应用?
- nn.PReLU(planes)
- Redis入门指南笔记
- 语音识别算法、模型等解析
- iOS集成OpenCV,并实现图片马赛克
- Hacking the PS4, part 1
- mysql 1055 - Expression 解决
- win10重新安装以太坊mist客户端
- Excel技巧—两招轻松搞定汉字转拼音
- 最简单DIY基于STM32单片机的WIFI智能小车设计方案