二分查找算法

本文深入探讨了二分查找算法的基本原理与实际应用,通过一个具体的查找任务,即在一个有序列表中寻找特定元素的位置,详细讲解了算法的实现过程。文章提供了两种二分查找的代码实现方式,一种是递归方法,另一种是更完善的递归加迭代方法,后者能够准确返回目标元素的索引。此外,还讨论了当目标元素不存在时如何返回最接近的元素位置。
 1 # 算法
 2     # 查找算法
 3     # 排序算法
 4     # 最短路径算法
 5     # 等等
 6 
 7 
 8 
 9 # 二分查找算法  必须处理有序的
10 
11 # 如果有这样一个列表,让你从这个列表中找到66的位置,你怎么做?
12 l = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 55, 60, 80, 90]
13 
14 # # 代码实现
15 # def find(l, aim):
16 #     mid_index = len(l) // 2
17 #     if l[mid_index] < aim:
18 #         new_l = l[mid_index + 1 :]
19 #         find(new_l, aim)
20 #     elif l[mid_index] > aim:
21 #         new_l = l[:mid_index]
22 #         find(new_l, aim)
23 #     else:
24 #         print('找到了', mid_index, l[mid_index])
25 #
26 # find(l, 60)
27 
28 # 正确的二分法,第一个参数所查找的容器,第二个参数为要找的目标,第三第四为开始与结束位置
29 def find(l, aim, start = 0, end = None):
30     end = len(l) if end is None else end
31     mid_index = (end - start) // 2 + start
32     if start <= end:
33         if l[mid_index] < aim:
34             return find(l, aim, start = mid_index + 1, end = end )
35         elif l[mid_index] > aim:
36             return find(l, aim, start = start, end = mid_index - 1)
37         else:
38             print('扎到了', mid_index, l[mid_index])
39             return mid_index
40     else: # 找不到应该返回离这个数最近的一个数怎么样?
41         print('找不到')
42         return 0
43 
44 l = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 55, 60, 80, 90]
45 
46 print(find(l, 60))  # 12
View Code

 

转载于:https://www.cnblogs.com/whylinux/p/9657762.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值