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里disconnect UDP套接字的方法
Apr 23 Python
Django发送html邮件的方法
May 26 Python
python smtplib模块自动收发邮件功能(二)
May 22 Python
python numpy和list查询其中某个数的个数及定位方法
Jun 27 Python
Python 数值区间处理_对interval 库的快速入门详解
Nov 16 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
Jan 23 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
Jan 20 Python
python动态文本进度条的实例代码
Jan 22 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
Mar 02 Python
Python filter()及reduce()函数使用方法解析
Sep 05 Python
Python实现EM算法实例代码
Oct 04 Python
python 实现的车牌识别项目
Jan 25 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
实用函数10
2007/11/08 PHP
比file_get_contents稳定的curl_get_contents分享
2012/01/11 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
微信封装的调用微信签名包的类库
2017/06/08 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
2017/06/11 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
2014/05/11 Javascript
jquery制作多功能轮播图插件
2015/04/02 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
2016/08/05 Javascript
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
js 计数排序的实现示例(升级版)
2020/01/12 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
2020/11/23 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
Python打印斐波拉契数列实例
2015/07/07 Python
python实现维吉尼亚加密法
2019/03/20 Python
Python判断对象是否为文件对象(file object)的三种方法示例
2019/04/26 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
Omio荷兰:预订火车、巴士和机票
2018/11/04 全球购物
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
Foot Locker加拿大官网:美国知名运动产品零售商
2019/07/21 全球购物
北美最大的参茸药食商城:德成行
2020/12/06 全球购物
联强国际笔试题面试题
2013/07/10 面试题
关爱残疾人演讲稿
2014/05/24 职场文书
django中websocket的具体使用
2022/01/22 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
2022/06/28 Oracle