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标准日志模块logging的使用方法
Nov 01 Python
Python中optparse模块使用浅析
Jan 01 Python
python同时给两个收件人发送邮件的方法
Apr 30 Python
python类和函数中使用静态变量的方法
May 09 Python
python 实现数组list 添加、修改、删除的方法
Apr 04 Python
Python实现查看系统启动项功能示例
May 10 Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
Jun 13 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 Python
Elasticsearch 聚合查询和排序
Apr 19 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数据类型之布尔型的介绍
2013/04/28 PHP
php基于dom实现的图书xml格式数据示例
2017/02/03 PHP
CentOS 上搭建 PHP7 开发测试环境
2017/02/26 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
基于php编程规范(详解)
2017/08/17 PHP
PHP页面静态化――纯静态与伪静态用法详解
2020/06/05 PHP
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
jquery tab插件制作实现代码
2010/06/22 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
JS实现黑客帝国文字下落效果
2015/09/01 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
2018/01/23 Javascript
vue实现文字加密功能
2019/09/27 Javascript
[01:11:08]Winstrike vs NB 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
python中对list去重的多种方法
2014/09/18 Python
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
Django基础之Model操作步骤(介绍)
2017/05/27 Python
Python 自动刷博客浏览量实例代码
2017/06/14 Python
浅谈django三种缓存模式的使用及注意点
2018/09/30 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
Lou & Grey美国官网:主打舒适性面料服饰
2017/12/21 全球购物
咨询公司各岗位职责
2013/12/02 职场文书
展会邀请函范文
2014/01/26 职场文书
父亲的菜园教学反思
2014/02/13 职场文书
质量承诺书范文
2014/03/27 职场文书
承诺函格式模板
2015/01/21 职场文书
收费员岗位职责
2015/02/14 职场文书
党员干部学习三严三实心得体会
2016/01/05 职场文书
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle