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中的reduce内建函数使用方法指南
Aug 31 Python
Python 稀疏矩阵-sparse 存储和转换
May 27 Python
Python实现的json文件读取及中文乱码显示问题解决方法
Aug 06 Python
在python中实现将一张图片剪切成四份的方法
Dec 05 Python
python+pyqt5编写md5生成器
Mar 18 Python
python模块hashlib(加密服务)知识点讲解
Nov 25 Python
pytorch sampler对数据进行采样的实现
Dec 31 Python
解决Python图形界面中设置尺寸的问题
Mar 05 Python
通过实例解析Python文件操作实现步骤
Sep 21 Python
Python内存泄漏和内存溢出的解决方案
Sep 26 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
Mar 03 Python
Python 视频画质增强
Apr 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
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
2010/06/25 Javascript
javascript插入样式实现代码
2012/02/22 Javascript
阻止子元素继承父元素事件具体思路及实现
2013/05/02 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
jQuery+CSS3折叠卡片式下拉列表框实现效果
2015/11/02 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
使用FormData实现上传多个文件
2018/12/04 Javascript
javascript实现函数柯里化与反柯里化过程解析
2019/10/08 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
Python对字符串实现去重操作的方法示例
2017/08/11 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
python修改文件内容的3种方法详解
2019/11/15 Python
基于python监控程序是否关闭
2020/01/14 Python
python实现手势识别的示例(入门)
2020/04/15 Python
python线程里哪种模块比较适合
2020/08/02 Python
浅谈Python3中print函数的换行
2020/08/05 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
CSS实现进度条和订单进度条的示例
2020/11/05 HTML / CSS
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
学习标兵获奖感言
2014/02/20 职场文书
装修设计师求职信
2014/02/26 职场文书
酒店周年庆活动方案
2014/08/21 职场文书
个人委托书范本汇总
2014/10/01 职场文书
2014年保密工作总结
2014/11/22 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
学校运动会通讯稿
2015/07/18 职场文书