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 ZipFile模块详解
Nov 01 Python
Python的另外几种语言实现
Jan 29 Python
python中set常用操作汇总
Jun 30 Python
python实现简单名片管理系统
Nov 30 Python
python basemap 画出经纬度并标定的实例
Jul 09 Python
python实现最小二乘法线性拟合
Jul 19 Python
提升Python效率之使用循环机制代替递归函数
Jul 23 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
最小二乘法及其python实现详解
Feb 24 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
Nov 24 Python
详解Python GUI编程之PyQt5入门到实战
Dec 10 Python
python中的None与NULL用法说明
May 25 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 session 错误
2009/05/21 PHP
php设计模式 Proxy (代理模式)
2011/06/26 PHP
神盾加密解密教程(一)PHP变量可用字符
2014/05/28 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
jquery键盘事件介绍
2011/01/31 Javascript
javascript是怎么继承的介绍
2012/01/05 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
如何基于JavaScript判断图片是否加载完成
2019/12/28 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
Python函数式编程指南(四):生成器详解
2015/06/24 Python
关于Python面向对象编程的知识点总结
2017/02/14 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
2018/12/11 Python
使用Windows批处理和WMI设置Python的环境变量方法
2019/08/14 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
西班牙创意礼品和小工具网上商店:Curiosite
2016/07/26 全球购物
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
销售会计工作职责
2013/12/02 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
车贷收入证明范本
2014/09/14 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
会计师事务所实习证明
2014/11/16 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
导游词之岳阳楼
2019/09/25 职场文书