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 相关文章推荐
pyramid配置session的方法教程
Nov 27 Python
python调用新浪微博API项目实践
Jul 28 Python
Python中规范定义命名空间的一些建议
Jun 04 Python
Python多层嵌套list的递归处理方法(推荐)
Jun 08 Python
Python实现将Excel转换为json的方法示例
Aug 05 Python
python 去除txt文本中的空格、数字、特定字母等方法
Jul 24 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 Python
使用coverage统计python web项目代码覆盖率的方法详解
Aug 05 Python
python爬虫模拟浏览器访问-User-Agent过程解析
Dec 28 Python
代码总结Python2 和 Python3 字符串的区别
Jan 28 Python
Python3.x+pyqtgraph实现数据可视化教程
Mar 14 Python
Django-simple-captcha验证码包使用方法详解
Nov 28 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
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
Javascript中Event属性搜集整理
2013/09/17 Javascript
javascript 操作符(~、&、|、^、)使用案例
2014/12/31 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
JavaScript实现的浏览器下载文件的方法
2017/08/09 Javascript
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
python二叉树的实现实例
2013/11/21 Python
Python实现简单字典树的方法
2016/04/29 Python
基于wxPython的GUI实现输入对话框(2)
2019/02/27 Python
在Python中COM口的调用方法
2019/07/03 Python
django框架forms组件用法实例详解
2019/12/10 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
2020/02/05 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
一夜的工作教学反思
2014/02/08 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
写好自荐信需做到的5要点
2014/03/07 职场文书
公务员保密承诺书
2014/03/27 职场文书
机械专业求职信范文
2014/07/15 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
市级三好学生评语
2014/12/29 职场文书
内乡县衙导游词
2015/02/05 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python