Python有序查找算法之二分法实例分析


Posted in Python onDecember 11, 2017

本文实例讲述了Python有序查找算法之二分法。分享给大家供大家参考,具体如下:

二分法是一种快速查找的方法,时间复杂度低,逻辑简单易懂,总的来说就是不断的除以2除以2...

例如需要查找有序数组arr里面的某个关键字key的位置,那么首先确认arr的中位数或者中点center,下面分为三种情况:

① 假如arr[center]>key,说明key在arr中心左边范围;
② 假如arr[center]<key,说明key在arr中心右边范围;
③ 假如arr[center]=key,说明key在arr中心。

范围每次缩小一半,写个while的死循环知道找到为止。

二分法查找非常快且非常常用,但是唯一要求是要求数组是有序的

前面一篇冒泡排序可以去看看:

二分法的代码如下:

# -*- coding: utf-8 -*-
def BinarySearch(arr, key):
 # 记录数组的最高位和最低位
 min = 0
 max = len(arr) - 1
 if key in arr:
  # 建立一个死循环,直到找到key
  while True:
   # 得到中位数
   # 这里一定要加int,防止列表是偶数的时候出现浮点数据
   center = int((min + max) / 2)
   # key在数组左边
   if arr[center] > key:
    max = center - 1
   # key在数组右边
   elif arr[center] < key:
    min = center + 1
   # key在数组中间
   elif arr[center] == key:
    print(str(key) + "在数组里面的第" + str(center) + "个位置")
    return arr[center]
 else:
  print("没有该数字!")
if __name__ == "__main__":
 print("三水点靠木测试结果:")
 arr = [1, 6, 9, 15, 26, 38, 49, 57, 63, 77, 81, 93]
 while True:
  key = raw_input("请输入你要查找的数字:")
  if key == " ":
   print("谢谢使用!")
   break
  else:
   BinarySearch(arr, int(key))

运行结果:

Python有序查找算法之二分法实例分析

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
编程语言Python的发展史
Sep 26 Python
Python类属性与实例属性用法分析
May 09 Python
Python实现将绝对URL替换成相对URL的方法
Jun 28 Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 Python
Python爬虫DOTA排行榜爬取实例(分享)
Jun 13 Python
对python中return和print的一些理解
Aug 18 Python
python中reduce()函数的使用方法示例
Sep 29 Python
python配置grpc环境
Jan 01 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
Apr 02 Python
详解用Python为直方图绘制拟合曲线的两种方法
Aug 21 Python
python使用celery实现异步任务执行的例子
Aug 28 Python
pytorch 中nn.Dropout的使用说明
May 20 Python
django实现用户登陆功能详解
Dec 11 #Python
Python通过Django实现用户注册和邮箱验证功能代码
Dec 11 #Python
Python实现冒泡排序的简单应用示例
Dec 11 #Python
Python最火、R极具潜力 2017机器学习调查报告
Dec 11 #Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 #Python
让Python更加充分的使用Sqlite3
Dec 11 #Python
pandas中Timestamp类用法详解
Dec 11 #Python
You might like
PHP计算加权平均数的方法
2015/07/16 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
tagName的使用,留一笔
2006/06/26 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
2014/09/01 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
javascript实现淘宝幻灯片广告展示效果
2015/04/27 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
微信小程序实现美团菜单
2018/06/06 Javascript
koa上传excel文件并解析的实现方法
2018/08/09 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
vue实现的封装全局filter并统一管理操作示例
2020/02/02 Javascript
Python GAE、Django导出Excel的方法
2008/11/24 Python
python使用cookielib库示例分享
2014/03/03 Python
Python和php通信乱码问题解决方法
2014/04/15 Python
在Python中使用__slots__方法的详细教程
2015/04/28 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
有关Tensorflow梯度下降常用的优化方法分享
2020/02/04 Python
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
利用SVG和CSS3来实现一个炫酷的边框动画
2015/07/22 HTML / CSS
世界领先的电子书网站:eBooks.com(在线购买小说、非小说和教科书)
2019/03/30 全球购物
怎么写好自荐信
2013/10/30 职场文书
低碳日宣传活动总结
2014/07/09 职场文书
尊师重教演讲稿
2014/09/04 职场文书
法人委托书的范本格式
2014/09/11 职场文书
初中学习计划书范文
2014/09/15 职场文书
银行竞聘报告范文
2014/11/06 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers