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获取Linux系统的各种信息
Jul 10 Python
Python实现的二维码生成小软件
Jul 11 Python
在Python中使用模块的教程
Apr 27 Python
python简单实现刷新智联简历
Mar 30 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
Python判断文件或文件夹是否存在的三种方法
Jul 27 Python
Python进度条实时显示处理进度的示例代码
Jan 30 Python
python如何查看微信消息撤回
Nov 27 Python
django主动抛出403异常的方法详解
Jan 04 Python
基于python的docx模块处理word和WPS的docx格式文件方式
Feb 13 Python
python 比较字典value的最大值的几种方法
Apr 17 Python
Django权限控制的使用
Jan 07 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入门速成(2)
2006/10/09 PHP
对PHP新手的一些建议(PHP学习经验总结)
2014/08/20 PHP
php计算年龄精准到年月日
2015/11/17 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
原生Javascript插件开发实践
2017/01/18 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
Python中用max()方法求最大值的介绍
2015/05/15 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
2019/07/03 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
python自动生成model文件过程详解
2019/11/02 Python
python实现logistic分类算法代码
2020/02/28 Python
python实现一个猜拳游戏
2020/04/05 Python
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
"引用"与多态的关系
2013/02/01 面试题
爱国卫生月实施方案
2014/02/21 职场文书
移交协议书
2014/08/19 职场文书
2014年反腐倡廉工作总结
2014/12/05 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
国富论读书笔记
2015/06/26 职场文书
大学生读书笔记大全
2015/07/01 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
JS实现九宫格拼图游戏
2022/06/28 Javascript