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实现获取Ip归属地等信息
Aug 27 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
python3 图片referer防盗链的实现方法
Mar 12 Python
详解numpy.meshgrid()方法使用
Aug 01 Python
python关闭占用端口方式
Dec 17 Python
python 输出列表元素实例(以空格/逗号为分隔符)
Dec 25 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
Mar 24 Python
基于Django signals 信号作用及用法详解
Mar 28 Python
django rest framework serializer返回时间自动格式化方法
Mar 31 Python
python 实现IP子网计算
Feb 18 Python
Django中的DateTimeField和DateField实现
Feb 24 Python
通过Python把学姐照片做成拼图游戏
Feb 15 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
BBS(php & mysql)完整版(六)
2006/10/09 PHP
php抓取并保存网站图片的实现代码
2015/10/28 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
Javascript 类与静态类的实现
2010/04/01 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
jQuery解决input超多的表单提交
2015/08/10 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
AngularJs实现聊天列表实时刷新功能
2017/06/15 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
vue 查看dist文件里的结构(多种方式)
2020/01/17 Javascript
node 版本切换的实现
2020/02/02 Javascript
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
在Django的session中使用User对象的方法
2015/07/23 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
python读取Kafka实例
2019/12/23 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
俄罗斯家居用品购物网站:Евродом
2020/11/21 全球购物
如何通过jdbc调用存储过程
2012/04/19 面试题
家佳咖啡店创业计划书
2013/12/27 职场文书
写给女生的道歉信
2014/01/08 职场文书
干部年终考核评语
2015/01/04 职场文书
党校毕业个人总结
2015/02/28 职场文书
公司市场部岗位职责
2015/04/15 职场文书
焦裕禄纪念馆观后感
2015/06/09 职场文书
golang中的struct操作
2021/11/11 Golang