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实现定制交互式命令行的方法
Jul 03 Python
Python中list列表的一些进阶使用方法介绍
Aug 15 Python
python通过文件头判断文件类型
Oct 30 Python
Python实现TCP/IP协议下的端口转发及重定向示例
Jun 14 Python
Python处理JSON数据并生成条形图
Aug 05 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
Python序列循环移位的3种方法推荐
Apr 09 Python
Python命名空间的本质和加载顺序
Dec 17 Python
用django设置session过期时间的方法解析
Aug 05 Python
Python 实现try重新执行
Dec 21 Python
在tensorflow中设置保存checkpoint的最大数量实例
Jan 21 Python
logging level级别介绍
Feb 21 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下Memcached入门实例解析
2015/01/05 PHP
php使用cookie实现记住用户名和密码实现代码
2015/04/27 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
2020/02/10 PHP
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
jQuery阻止同类型事件小结
2013/04/19 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
原生Javascript封装的一个AJAX函数分享
2014/10/11 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
JavaScript制作简单的框选图表
2017/05/15 Javascript
详解easyui基于 layui.laydate日期扩展组件
2018/07/18 Javascript
解决vue-cli webpack打包后加载资源的路径问题
2018/09/25 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
[53:20]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 VG vs OG
2018/04/03 DOTA
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
Python视频爬虫实现下载头条视频功能示例
2018/05/07 Python
python的pip安装以及使用教程
2018/09/18 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
英国Amara家居法国网站:家居装饰,现代装饰和豪华礼品
2016/12/15 全球购物
护理专业学生职业生涯规划范文
2014/03/11 职场文书
三方合作协议书范本
2014/04/18 职场文书
《莫泊桑拜师》教学反思
2014/04/23 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
毕业生工作求职信
2014/06/30 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
Golang 如何实现函数的任意类型传参
2021/04/29 Golang