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 相关文章推荐
Flask入门教程实例:搭建一个静态博客
Mar 27 Python
Python导入txt数据到mysql的方法
Apr 08 Python
python返回昨天日期的方法
May 13 Python
Python中pygal绘制雷达图代码分享
Dec 07 Python
python 获取当天每个准点时间戳的实例
May 22 Python
python SMTP实现发送带附件电子邮件
May 22 Python
pandas 数据归一化以及行删除例程的方法
Nov 10 Python
Python使用paramiko操作linux的方法讲解
Feb 25 Python
django 微信网页授权认证api的步骤详解
Jul 30 Python
python绘制封闭多边形教程
Feb 18 Python
Python实现汇率转换操作
May 03 Python
Python pymysql模块安装并操作过程解析
Oct 13 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
linux iconv方法的使用
2011/10/01 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
php实现的通用图片处理类
2015/03/24 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
JS制作简单的三级联动
2015/03/18 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
2015/11/13 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
2020/08/21 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
2016/07/18 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
Python实现快速排序算法及去重的快速排序的简单示例
2016/06/26 Python
详解python3中tkinter知识点
2018/06/21 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
python Tensor和Array对比分析
2020/01/08 Python
python学习将数据写入文件并保存方法
2020/06/07 Python
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
如何查找和删除数据库中的重复数据
2014/11/05 面试题
中学生操行评语
2014/04/24 职场文书
中班上学期幼儿评语
2014/04/30 职场文书
温馨提示标语
2014/06/26 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
年度考核个人总结
2015/03/06 职场文书
在人间读书笔记
2015/06/30 职场文书
R9700摩机记
2022/04/05 无线电