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迭代器实例简析
Sep 25 Python
举例详解Python中循环语句的嵌套使用
May 14 Python
在Python的Django框架下使用django-tagging的教程
May 30 Python
python方向键控制上下左右代码
Jan 20 Python
python批量实现Word文件转换为PDF文件
Mar 15 Python
python 用正则表达式筛选文本信息的实例
Jun 05 Python
用Python解决x的n次方问题
Feb 08 Python
Python空间数据处理之GDAL读写遥感图像
Aug 01 Python
用python拟合等角螺线的实现示例
Dec 27 Python
Python连接SQLite数据库并进行增册改查操作方法详解
Feb 18 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
详解基于Scrapy的IP代理池搭建
Sep 29 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
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
php Calender(日历)代码分享
2014/01/03 PHP
php文件包含的几种方式总结
2019/09/19 PHP
javascript 写类方式之六
2009/07/05 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
PageSwitch插件实现100种不同图片切换效果
2015/07/28 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
基于javascript bootstrap实现生日日期联动选择
2016/04/07 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
2016/06/07 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
Vue实现页面添加水印功能
2019/11/09 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
Python端口扫描简单程序
2016/11/10 Python
Unicode和Python的中文处理
2017/03/19 Python
python机器学习之神经网络(一)
2017/12/20 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
python实现爬山算法的思路详解
2019/04/09 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
python将数组n等分的实例
2019/12/02 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
2020/03/16 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
修复iPhone的safari浏览器上submit按钮圆角bug
2012/12/24 HTML / CSS
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
美国复古街头服饰精品店:Need Supply Co.
2017/02/22 全球购物
大学毕业感言一句话
2014/02/06 职场文书
趣味运动会活动方案
2014/02/12 职场文书
禁止酒驾标语
2014/06/25 职场文书
服务整改报告
2014/11/06 职场文书
2014年副班长工作总结
2014/12/10 职场文书
2015最新学生自我评价范文
2015/03/03 职场文书
nginx配置proxy_pass中url末尾带/与不带/的区别详解
2021/03/31 Servers