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练习程序批量修改文件名
Jan 16 Python
Python实现简单拆分PDF文件的方法
Jul 30 Python
python利用百度AI实现文字识别功能
Nov 27 Python
浅谈PySpark SQL 相关知识介绍
Jun 14 Python
在Python中append以及extend返回None的例子
Jul 20 Python
Python 矩阵转置的几种方法小结
Dec 02 Python
Python中itertools的用法详解
Feb 07 Python
Django的ListView超详细用法(含分页paginate)
May 21 Python
opencv 查找连通区域 最大面积实例
Jun 04 Python
python使用nibabel和sitk读取保存nii.gz文件实例
Jul 01 Python
Python虚拟环境的创建和使用详解
Sep 07 Python
详解用 python-docx 创建浮动图片
Jan 24 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
解析yii数据库的增删查改
2013/06/20 PHP
PHP里的单例类写法实例
2015/06/25 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
使javascript也能包含文件
2006/10/26 Javascript
js类中的公有变量和私有变量
2008/07/24 Javascript
遍历jquery对象的代码分享
2011/11/02 Javascript
JQuery文字列表向上滚动的代码
2013/11/13 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
JS实现文档加载完成后执行代码
2015/07/09 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
python实现中文输出的两种方法
2015/05/09 Python
Python实现购物程序思路及代码
2017/07/24 Python
python XlsxWriter模块创建aexcel表格的实例讲解
2018/05/03 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
用于业余项目的8个优秀Python库
2018/09/21 Python
一看就懂得Python的math模块
2018/10/21 Python
基于wxPython的GUI实现输入对话框(2)
2019/02/27 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
企业为何需要商业计划书
2013/12/26 职场文书
市场营销职业生涯规划书范文
2014/01/12 职场文书
文明学生事迹材料
2014/01/29 职场文书
市场营销专业毕业生求职信
2014/03/26 职场文书
锦旗标语大全
2014/06/23 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
运动会加油稿20字
2014/11/15 职场文书
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers