Python中的二分查找算法

1 二分查找算法的原理

二分查找的前提是,被查找的数列是有序的(升序或降序)。首先将要查找的数据与有序数列内处于中间位置的数据进行比较,如果两者相同,则查找成功;否则就根据数据的有序性,在确定包含该数据的范围应该在数列的前半部分还是后半部分;在新确定的缩小的数据范围内,继续按照上述方法进行查找,直到查找到指定数据,表示查找成功,如果指定数据不在有序数列中,则表示查找不成功。

2 二分查找算法的手动实现

二分查找算法的手动实现如图1所示。

图1 二分查找算法的手动实现

假设要在一个有序数列中查找10,首先查找范围是整个数列,此时查找的起点是第一个元素,重点是最后一个元素,此时数列中间位置的数据是“18”,如图1①所示;因为10比18小,可以将查找范围缩小到数列的前半部分,起点不变,终点是18的前一个元素,中间位置的数据是5,如图1②所示;因为10比5大,可以将查找范围缩小到数列的后半部分,起点是5的下一个数据,终点不变,因为此时数列中只剩下两个数据了,取出第一个数据与10进行比较,此时两个数据相等,找到指定数据,如果第一个数据不相等,则再比较第二个数据。

3 二分查找算法的代码实现

二分查找算法的代码实现如图2所示。

图2 二分查找算法的代码实现

其中,第1-14行自定义了名为binarySearch()的函数实现二分查找;该函数的theValues参数表示被查找的数列,target表示指定要查找的数据。第2-4行的start表示查找范围的起点,end表示查找范围的终点,pos表示查找到数据的位置。第5行的while循环表示不断的缩小查找范围,第6行的mid表示数列的中间位置,当数列中间位置的值与要查找的值相等,则说明找到指定数据,将mid的值赋值给pos,并返回pos,如代码7-8所示;如果要查找的值小于数列中间位置的值,此时将范围缩小到数列的前半部分,即查找范围的终点变为此前中间位置的前一个数据,起点不变,如代码10-11所示;如果要查找的值大于数列中间位置的值,此时将范围缩小到数列的后半部分,即查找范围的其点变为此前中间位置的后一个数据,终点不变,如代码12-13所示。

代码第15行定义了一个有序(升序)的列表values,第16行调用binarySearch()函数,在values中搜索数据10,如果返回值pos是非负数,则说明找到指定值,否则说明没有找到指定值。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值