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脚本将Bing的每日图片作为桌面的教程
May 04 Python
Python生成密码库功能示例
May 23 Python
python 列表递归求和、计数、求最大元素的实例
Nov 28 Python
python selenium firefox使用详解
Feb 26 Python
python itchat给指定联系人发消息的方法
Jun 11 Python
Django的models中on_delete参数详解
Jul 16 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
Sep 20 Python
python实现while循环打印星星的四种形状
Nov 23 Python
python pygame实现球球大作战
Nov 25 Python
如何基于python实现归一化处理
Jan 20 Python
基于jupyter代码无法在pycharm中运行的解决方法
Apr 21 Python
Tensorflow与Keras自适应使用显存方式
Jun 22 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 zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
php中session定期自动清理的方法
2015/11/12 PHP
apache集成php7.3.5的详细步骤
2019/06/20 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
JS简单的图片放大缩小的两种方法
2013/11/11 Javascript
css配合jquery美化 select
2013/11/29 Javascript
js的Boolean对象初始值示例
2014/03/04 Javascript
最简单的tab切换实例代码
2016/05/13 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
详解vue父子组件间传值(props)
2017/06/29 Javascript
JS实现图片手风琴效果
2020/04/17 Javascript
js读取本地文件的实例
2017/12/22 Javascript
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
解决ant Design中Select设置initialValue时的大坑
2020/10/29 Javascript
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
详解Python的Django框架中Manager方法的使用
2015/07/21 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
Pytorch maxpool的ceil_mode用法
2020/02/18 Python
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
家居设计专业个人自荐信范文
2013/11/26 职场文书
婚假请假条格式及范文
2014/04/10 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
预备党员转正意见
2015/06/01 职场文书
小马王观后感
2015/06/11 职场文书
幼儿园开学温馨提示
2015/07/15 职场文书
新课程改革心得体会
2016/01/22 职场文书
2016优秀青年志愿者事迹材料
2016/02/25 职场文书
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python