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中元类用法实例
Oct 10 Python
Python获取文件所在目录和文件名的方法
Jan 12 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
Jun 02 Python
Python基于Socket实现的简单聊天程序示例
Aug 05 Python
Python实现读取Properties配置文件的方法
Mar 29 Python
Python实现的redis分布式锁功能示例
May 29 Python
python实现将一个数组逆序输出的方法
Jun 25 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
python 轮询执行某函数的2种方式
May 03 Python
jupyter notebook指定启动目录的方法
Mar 02 Python
用基于python的appium爬取b站直播消费记录
Apr 17 Python
浅谈pytorch中的dropout的概率p
May 27 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 printf输出格式使用说明
2010/12/05 PHP
PHP 实现代码复用的一个方法 traits新特性
2015/02/22 PHP
php遍历CSV类实例
2015/04/14 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
jquery ajax 同步异步的执行 return值不能取得的解决方案
2012/01/08 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
jQuery实现图片上传和裁剪插件Croppie
2015/11/29 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
解决linux下node.js全局模块找不到的问题
2018/05/15 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
总结javascript三元运算符知识点
2018/09/28 Javascript
layui实现把数据表格时间戳转换为时间格式的例子
2019/09/12 Javascript
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
基于数据归一化以及Python实现方式
2018/07/11 Python
Python双向循环链表实现方法分析
2018/07/30 Python
10个Python小技巧你值得拥有
2018/09/29 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
公司道歉信范文
2014/01/09 职场文书
记帐员岗位责任制
2014/02/08 职场文书
党员演讲稿
2014/09/04 职场文书
个人委托函范文
2015/01/29 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
MYSQL数据库使用UTF-8中文编码乱码的解决办法
2021/05/26 MySQL