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 list中append()与extend()用法分享
Mar 24 Python
用Python的pandas框架操作Excel文件中的数据教程
Mar 31 Python
详解python中requirements.txt的一切
Mar 03 Python
Python中协程用法代码详解
Feb 10 Python
python实现图书管理系统
Mar 12 Python
python openvc 裁剪、剪切图片 提取图片的行和列
Sep 19 Python
Python chardet库识别编码原理解析
Feb 18 Python
对Python中 \r, \n, \r\n的彻底理解
Mar 06 Python
如何理解Python中包的引入
May 29 Python
Django REST Swagger实现指定api参数
Jul 07 Python
python利用后缀表达式实现计算器功能
Feb 22 Python
python 爬取华为应用市场评论
May 29 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过滤危险html代码的函数
2008/07/22 PHP
php生成N个不重复的随机数实例
2013/11/12 PHP
php获取四位字母和数字的随机数的实现方法
2015/01/09 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
javascript 常用方法总结
2009/06/03 Javascript
js之事件冒泡和事件捕获详细介绍
2013/10/28 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
js实现无缝滚动特效
2015/12/20 Javascript
如何利用Promises编写更优雅的JavaScript代码
2016/05/17 Javascript
JSONP基础知识详解
2017/03/19 Javascript
JS实现复选框的全选和批量删除功能
2017/04/05 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
axios实现简单文件上传功能
2019/09/25 Javascript
Python 条件判断的缩写方法
2008/09/06 Python
初学python的操作难点总结(新手必看篇)
2017/08/03 Python
TensorFLow用Saver保存和恢复变量
2018/03/10 Python
用Python编写一个高效的端口扫描器的方法
2018/12/20 Python
Python字符串对象实现原理详解
2019/07/01 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
Django model select的多种用法详解
2019/07/16 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
2021/01/12 Python
zooplus意大利:在线宠物商店
2019/08/07 全球购物
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
关键字final的用法
2013/10/02 面试题
建筑施工实习自我鉴定
2013/09/19 职场文书
最新计算机专业自荐信
2013/10/16 职场文书
大学生自我鉴定范文
2013/12/28 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书