c语言黄金分割法搜索过程,【大话数据结构C语言】53 斐波那契查找(黄金分割法查找)...

欢迎关注我的公众号是【CodeAllen】,关注回复【1024】获取精品学习资源

程序员技术交流①群:736386324 ,程序员技术交流②群:371394777

和题目一样,这个算法是按照黄金分割法作为原理的

黄金分割就是0.618:1

先看下菲波那切数列

f565050ec63585ff4519a9a829464b95.png

9c4c81258b0404ecc80fe92c946207d5.png

代码实现:

#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;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值