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 正则式 概述及常用字符
May 07 Python
python通过pil模块将raw图片转换成png图片的方法
Mar 16 Python
利用python发送和接收邮件
Sep 27 Python
Python的多维空数组赋值方法
Apr 13 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
基于PyQt4和PySide实现输入对话框效果
Feb 27 Python
为什么你还不懂得怎么使用Python协程
May 13 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
Aug 08 Python
keras 权重保存和权重载入方式
May 21 Python
Pandas缺失值2种处理方式代码实例
Jun 13 Python
面向新手解析python Beautiful Soup基本用法
Jul 11 Python
Python基础之条件语句详解
Jun 16 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/03/17 PHP
php封装的验证码类分享
2017/02/26 PHP
php ajax confirm 删除实例详解
2019/03/06 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
js复制网页内容并兼容各主流浏览器的代码
2013/12/17 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
详解JS正则replace的使用方法
2016/03/06 Javascript
js实现定时进度条完成后切换图片
2017/01/04 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
微信小程序 如何获取网络状态
2019/07/26 Javascript
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
python冒泡排序算法的实现代码
2013/11/21 Python
Python3基础之基本数据类型概述
2014/08/13 Python
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
python实现感知器算法详解
2017/12/19 Python
python多进程中的内存复制(实例讲解)
2018/01/05 Python
DataFrame 将某列数据转为数组的方法
2018/04/13 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
python实现吃苹果小游戏
2020/03/21 Python
python 获取计算机的网卡信息
2021/02/18 Python
亲子拓展活动方案
2014/02/20 职场文书
2014年大学生党课心得体会范文
2014/03/29 职场文书
会计电算化专业求职信
2014/06/10 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书
2019年亲子运动会口号
2019/10/11 职场文书
python实现A*寻路算法
2021/06/13 Python
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js
苹果的回收机器人可以通过拆解iPhone获取大量的金和铜并外公布了环境保护最新进展
2022/04/21 数码科技