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中的tkinter模块作图的方法
Feb 07 Python
Python 元类实例解析
Apr 04 Python
python爬虫之urllib3的使用示例
Jul 09 Python
朴素贝叶斯Python实例及解析
Nov 19 Python
Python TCPServer 多线程多客户端通信的实现
Dec 31 Python
Python使用configparser库读取配置文件
Feb 22 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
Apr 30 Python
Python如何脚本过滤文件中的注释
May 27 Python
python让函数不返回结果的方法
Jun 22 Python
区分python中的进程与线程
Aug 13 Python
python中doctest库实例用法
Dec 31 Python
python 检测nginx服务邮件报警的脚本
Dec 31 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
牡丹941资料
2021/03/01 无线电
PHP跳转页面的几种实现方法详解
2013/06/08 PHP
php session_start()出错原因分析及解决方法
2013/10/28 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
php使用GD创建保持宽高比缩略图的方法
2015/04/17 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
JavaScript之appendChild、insertBefore和insertAfter使用说明
2010/12/30 Javascript
jQuery圆形统计图开发实例
2015/01/04 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
js上传图片预览的实现方法
2017/05/09 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
2019/07/15 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
python在不同层级目录import模块的方法
2016/01/31 Python
一看就懂得Python的math模块
2018/10/21 Python
python tkinter窗口最大化的实现
2019/07/15 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
python实现操作文件(文件夹)
2019/10/31 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
Django权限控制的使用
2021/01/07 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
内科护士实习自我鉴定
2013/10/17 职场文书
冰淇淋开店创业计划书
2014/02/01 职场文书
创先争优承诺书范文
2014/03/31 职场文书
英语一分钟演讲稿
2014/04/29 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
公司离职证明范本
2014/10/17 职场文书
大班上学期个人总结
2015/02/13 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
经典祝酒词大全
2015/08/12 职场文书
2016年公司新年寄语
2015/08/17 职场文书
怎样写工作总结啊!
2019/06/18 职场文书