你能正确实现二分检索吗

本文探讨了二分检索算法的核心概念及其在数组查找中的应用。通过实例演示了算法实现过程中可能遇到的问题,并提供了正确的代码示例。文章旨在帮助读者掌握二分检索的原理,提高编程技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前两天和一位学哥闲聊的时候,他对我提到了有关面试的一些细节。他说面试的时候,有一个扎实的编程基础还是很重要的。比如基本的排序算法(冒泡排序,插入排序,归并排序,基数排序等),查找算法(顺序查找,二分查找,分块查找,哈希表查找),这些一定要在纸上能写出代码。于是便拿起那本尘封已久的《编程珠玑》,随便翻了一页就翻到了二分检索这部分。

二分检索可以解决问题:只要数组中包含T(即要查找的数),那么通过不断缩小包含T的范围 ,最终就可以找到它。一开始,范围覆盖整个数组。讲述组的中间项羽T进行比较,可以排除一半元素,范围缩小一半。就这样反复比较,反复缩小范围,最终就会在数组中找到T,或者确定原以为T所在的范围实际为空。对于包含N个元素的集合,整个查找过程大约要经过log(2)N次比较。


或许大家都以为只要理解了二分检索的算法描述,就离顺利写出代码不远了。但是事实却并非如此,你要是不相信,可以自己动手敲一下。我是自己亲手实践了一把,果然出了bug。经过调试,算是正确了。大家不妨也试试,看看自己的表现怎样。

以下贴出本人自己写的二分检索算法(已修改过)

while(true) { if(a[middle] < x) { low = middle+1; middle = (low+high) / 2; } if(a[middle] > x) { high = middle-1; middle = (low+high) / 2; } if(a[middle] == x) { printf("Find it"); return x; } if(a[high] < x || a[low] > x) { printf("This number is not in the range"); break; } }
各位应该已经熟知该算法了,就当是温习吧。本人以后的文章将会逐渐贴出各种排序和查找的相关算法和大家交流和讨论。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值