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中sets模块的用法实例
Sep 30 Python
Python中使用Inotify监控文件实例
Feb 14 Python
Python Queue模块详细介绍及实例
Dec 27 Python
pandas 两列时间相减换算为秒的方法
Apr 20 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
python实现简单聊天室功能 可以私聊
Jul 12 Python
解决Django layui {{}}冲突的问题
Aug 29 Python
tensorflow 分类损失函数使用小记
Feb 18 Python
python之MSE、MAE、RMSE的使用
Feb 24 Python
Django如何使用jwt获取用户信息
Apr 21 Python
利用Pycharm连接服务器的全过程记录
Jul 01 Python
opencv用VS2013调试时用Image Watch插件查看图片
Jul 26 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 xml实例 留言本
2009/03/20 PHP
php Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
访问编码后的中文URL返回404错误的解决方法
2014/08/20 PHP
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
jquery 可排列的表实现代码
2009/11/13 Javascript
Javascript 类与静态类的实现
2010/04/01 Javascript
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
JavaScript中几个重要的属性(this、constructor、prototype)介绍
2013/05/19 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
2014/04/03 Javascript
jQuery页面加载初始化常用的三种方法
2014/06/04 Javascript
js判断图片加载完成后获取图片实际宽高的方法
2016/02/25 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
jQuery实现下拉菜单的实例代码
2017/06/19 jQuery
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
对vue中的事件穿透与禁止穿透实例详解
2019/10/28 Javascript
Python实现获取操作系统版本信息方法
2015/04/08 Python
Python批量转换文件编码格式
2015/05/17 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
Python3如何在Windows和Linux上打包
2020/02/25 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
2021/02/20 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
详解HTML5常用的语义化标签
2019/09/27 HTML / CSS
联想英国官网:Lenovo英国
2019/07/17 全球购物
农村党支部书记党群众路线四风问题整改措施
2014/09/26 职场文书
齐云山导游词
2015/02/06 职场文书
英文导游词
2015/02/13 职场文书
合同纠纷调解书
2015/05/20 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python
Redis实现短信验证码登录的示例代码
2022/06/14 Redis