吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1458|回复: 5
收起左侧

[讨论] 二分查找——算法

[复制链接]
YiZheng 发表于 2019-10-28 12:52
本帖最后由 YiZheng 于 2019-10-28 12:56 编辑

二分查找
二分查找:能在一组经过排序的数组中快速查找数据
速度:O(log2 N)(这里用到了对数,如果想学好算法建议去看看对数)



假如你定的是2
我猜5,5>2,你要告诉我,猜大了
假如你定的是8
我猜5,5<8,你要告诉我,猜小了

开始!
我问:“是5?“
“小了“
我问:“是8?“
“你好牛逼哦“

结论:那这个数一定比5大,现在可以排除小于5的
结论:不管多大的数组,先猜中间值,可以排除一半的数字,剩下的数字,继续猜中间值,又排除一半,循环下去,直到猜到为止。 用程序实现(c++): image.png
注释:int hight = sizeof(int) / sizeof(ary[0]) - 1;
sizeof(int) / sizeof(ary[0])求得是数组的长度,长度减一就是数组的下标,
大可忽略如果有人是用c++的话这句话中的ary[]是函数传参传进来的,
那么他的值永远都是1,解决方法就是你要传数组的话,就别在函数里面计算长度,在函数外面计算好,再传进来
image.png
image.png
image.png
image.png
image.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

dukeang 发表于 2019-10-28 13:20
学到了 学到了~
anyin 发表于 2019-10-28 13:46
不懂编程,不过好像高中的时候遇到没学过的函数常用此法找零点
fudashuai 发表于 2019-10-28 13:48
luanshils 发表于 2019-10-28 13:59
本帖最后由 luanshils 于 2019-10-28 14:01 编辑

其实就是一开始定位最小下标+最大下标,除以2,然后判断是在哪一个区域,大了就把height的范围设置为mid-1,小了就把low就设置成mid+1,最后就能判断到正确的数字下标
VioletKiss 发表于 2019-10-28 15:09
mid 这样取有可能会超过 int 的最大值,可以这样取:mid = low + ( high - low ) / 2;二分查找其实很高深的,完善了很多年才拥有了一个没有bug的版本,基于二分查找还要很多优化可以学习一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 00:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表