优草派 > Python

Python实现二分法算法实例

周文涛         优草派

二分法是一种高效的搜索算法,也是计算机科学中比较常见的一种算法。它的基本思想是将有序数组从中间分成两部分,如果目标值比中间值小,则在左半部分继续查找;如果目标值比中间值大,则在右半部分继续查找;如果目标值等于中间值,则查找成功。这种算法的时间复杂度为O(logn),是比较快的一种算法。下面我们用Python来实现二分法算法实例。

1.基本思路

Python实现二分法算法实例

二分法的基本思路是将有序数组从中间分成两部分,然后判断目标值在哪一部分,继续在该部分中进行查找,直到查找成功或者查找失败。具体实现过程如下:

(1)将数组从中间分成两部分,计算中间位置mid;

(2)判断目标值与中间值的大小关系,如果目标值比中间值小,则在左半部分继续查找,否则在右半部分继续查找;

(3)如果目标值等于中间值,则查找成功,返回中间位置;

(4)如果左右两部分没有目标值,则查找失败,返回-1。

2.实现过程

下面我们使用Python来实现二分法算法。代码如下:

def binary_search(arr, target):

left, right = 0, len(arr) - 1

while left <= right:

mid = (left + right) // 2

if arr[mid] == target:

return mid

elif arr[mid] < target:

left = mid + 1

else:

right = mid - 1

return -1

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]

target = 5

result = binary_search(arr, target)

if result != -1:

print("元素在数组中的索引为", str(result))

else:

print("元素不在数组中")

代码中的binary_search函数实现了二分法算法,接收两个参数:一个有序数组和目标值。函数首先计算数组的左右端点left和right,然后根据mid的值来判断目标值在哪一部分,继续在该部分中进行查找,直到查找成功或者查找失败。如果查找成功,返回中间位置;否则返回-1。最后我们测试了一下该函数,输出目标值在数组中的索引。

3.测试结果

我们使用上面的代码来测试一下二分法算法。假设有一个有序数组arr=[1,2,3,4,5,6,7,8,9],要查找的目标值为5。运行程序,输出结果如下:

元素在数组中的索引为 4

可以看到,程序正确地输出了目标值在数组中的索引为4。

4.优化思路

二分法算法的时间复杂度为O(logn),比较快,但是它有一些局限性,比如只能用于有序数组的查找。如果我们要查找的数据不是有序的,就需要先将其排序,这样会增加时间复杂度。所以,如果我们已经知道数据是无序的,那么二分法算法就不适用了。

此外,二分法算法还有一个问题,就是当数组中有重复元素时,它只能找到其中的一个元素,而不能找到所有的元素。如果我们要查找所有的元素,就需要进行一些额外的处理,比如使用两次二分法算法,一次查找元素的左端点,一次查找元素的右端点。

5.

  • 微信好友

  • 朋友圈

  • 新浪微博

  • QQ空间

  • 复制链接

取消
5天短视频训练营
新手入门剪辑课程,零基础也能学
分享变现渠道,助你兼职赚钱
限时特惠:0元
立即抢
新手剪辑课程 (精心挑选,简单易学)
第一课
新手如何学剪辑视频? 开始学习
第二课
短视频剪辑培训班速成是真的吗? 开始学习
第三课
不需要付费的视频剪辑软件有哪些? 开始学习
第四课
手机剪辑app哪个好? 开始学习
第五课
如何做短视频剪辑赚钱? 开始学习
第六课
视频剪辑接单网站APP有哪些? 开始学习
第七课
哪里可以学短视频运营? 开始学习
第八课
做短视频运营需要会什么? 开始学习
【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。

客服热线:0731-85127885

湘ICP备19005950号-1  

工商营业执照信息

违法和不良信息举报

举报电话:0731-85127885 举报邮箱:tousu@csai.cn

优草派  版权所有 © 2024