Python二分法搜索算法实例分析


Posted in Python onMay 11, 2015

本文实例分析了Python二分法搜索算法。分享给大家供大家参考。具体分析如下:

今天看书时,书上提到二分法虽然道理简单,大家一听就明白但是真正能一次性写出别出错的实现还是比较难的,即使给了你充足的时间,比如1小时。如果你不是特别认真的话,可能还是会出一些这样那样的错误,所以就尝试了自己去实现一下,看能否一次通过,结果自然不言而喻,虽然用的时间不长,但是我失败了,呵呵。

个人觉得失败的最主要原因是自己没有认真的先想好这个思路和可能出现的分支情况,而是直接凭主观臆想就去写代码了,完全正中书上所说的行为,所以也如书上所说,出错了。后经调试应该是得到了基本的正确算法,内容如下:

#!/usr/bin/env python
#encoding: utf-8
def half_search(search_arr, search_str):
  lb = 0
  ub = len(search_arr) - 1
  for i in range(ub/2 + 1):
    if lb > ub:
      return -1
    mid = (ub + lb)/2
    if search_arr[mid] == search_str:
      return mid
    elif search_arr[mid] > search_str:
      ub = mid - 1
    else:
      lb = mid + 1
if __name__=='__main__':
  arr = [10,20,30,40,50,60,70]
  print half_search(arr, 1)
  print half_search(arr, 11)
  print half_search(arr, 22)
  print half_search(arr, 33)
  print half_search(arr, 40)
  print half_search(arr, 55)
  print half_search(arr, 66)
  print half_search(arr, 70)
  print half_search(arr, 8)

结果:

-1 
-1 
-1 
-1 
3 
-1 
-1 
6 
-1

正整数代表在数组中的下标,3那就是第4个位置;-1代表不存在

总结:

实现简单的算法之前,如果已经有了一套最简易的实现【比如直接打印100条相似的内容】,不妨要想想是否还有更精巧的实现【可否用循环+参数化替代】;实现稍微复杂点的算法时,不妨先在纸上画出各种可能的验证情况,避免实现是缺胳膊短腿的;还有一点就是算法什么的还是要多练,不然稍微复杂的过一阵可能就会忘记细节了。我想这就叫术业有专攻吧!

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python批量修改文件后缀的方法
Jan 26 Python
Python装饰器的应用场景代码总结
Apr 10 Python
keras-siamese用自己的数据集实现详解
Jun 10 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
Jul 09 Python
python接入支付宝的实例操作
Jul 20 Python
Python连接Impala实现步骤解析
Aug 04 Python
python判断一个变量是否已经设置的方法
Aug 13 Python
python try...finally...的实现方法
Nov 25 Python
用python对oracle进行简单性能测试
Dec 05 Python
python 爬取腾讯视频评论的实现步骤
Feb 18 Python
python实现局部图像放大
Nov 17 Python
Python采集壁纸并实现炫轮播
Apr 30 Python
python处理图片之PIL模块简单使用方法
May 11 #Python
python自定义解析简单xml格式文件的方法
May 11 #Python
python引用DLL文件的方法
May 11 #Python
深入解析Python中的WSGI接口
May 11 #Python
详细解析Python中__init__()方法的高级应用
May 11 #Python
从Python的源码来解析Python下的freeblock
May 11 #Python
详解Python的Django框架中的templates设置
May 11 #Python
You might like
php入门学习知识点四 PHP正则表达式基本应用
2011/07/14 PHP
php实现查询百度google收录情况(示例代码)
2013/08/02 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
2014/05/09 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
php按单词截取字符串的方法
2015/04/07 PHP
PHP易混淆知识整理笔记
2015/09/24 PHP
php验证手机号码
2015/11/11 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
PHP实现表单提交时去除斜杠的方法
2016/12/26 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
JavaScript Math.floor方法(对数值向下取整)
2015/01/09 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
jquery实现弹窗功能(窗口居中显示)
2017/02/27 Javascript
Vue-cli项目获取本地json文件数据的实例
2018/03/07 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
vue中引入第三方字体文件的方法示例
2018/12/17 Javascript
Python之PyUnit单元测试实例
2014/10/11 Python
用Python实现服务器中只重载被修改的进程的方法
2015/04/30 Python
如何使用python爬取csdn博客访问量
2016/02/14 Python
你应该知道的python列表去重方法
2017/01/17 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
五年后的职业生涯规划
2014/03/04 职场文书
演讲比赛策划方案
2014/06/11 职场文书
优秀教师单行材料
2014/12/16 职场文书
大连导游词
2015/02/12 职场文书
婚礼答谢词范文
2015/09/29 职场文书
《唯一的听众》教学反思
2016/02/18 职场文书
《圆的面积》教学反思
2016/02/19 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript