python有序查找算法 二分法实例解析


Posted in Python onFebruary 18, 2020

这篇文章主要介绍了python有序查找算法 二分法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

二分法是一种快速查找的方法,时间复杂度低,逻辑简单易懂,总的来说就是不断的除以2除以2...

但是需要注意:

待查找的序列区间单调有序

例如需要查找有序数组arr里面的某个关键字key的位置,那么首先确认arr的中位数或者中点center,下面分为三种情况:

假如arr[center]>key,说明key在arr中心左边范围;

假如arr[center]<key,说明key在arr中心右边范围;

假如arr[center]=key,说明key在arr中心。

范围每次缩小一半,写个while的死循环知道找到为止。

二分法查找非常快且非常常用,但是唯一要求是要求数组是有序的

二分法的代码如下:

#!/usr/bin/python3.4
# -*- 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__":
  arr = [1, 6, 9, 15, 26, 38, 49, 57, 63, 77, 81, 93]
  while True:
    key = input("请输入你要查找的数字:")
    if key == " ":
      print("谢谢使用!")
      break
    else:
      BinarySearch(arr, int(key))

运行结果:

python有序查找算法 二分法实例解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现bucket排序算法实例分析
May 04 Python
Python的math模块中的常用数学函数整理
Feb 04 Python
python去重,一个由dict组成的list的去重示例
Jan 21 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
Aug 23 Python
python获取引用对象的个数方式
Dec 20 Python
使用python绘制cdf的多种实现方法
Feb 25 Python
python 使用递归实现打印一个数字的每一位示例
Feb 27 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 Python
Python建造者模式案例运行原理解析
Jun 29 Python
python Paramiko使用示例
Sep 21 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
Nov 24 Python
细说NumPy数组的四种乘法的使用
Dec 18 Python
Python连接SQLite数据库并进行增册改查操作方法详解
Feb 18 #Python
Python 解析pymysql模块操作数据库的方法
Feb 18 #Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 #Python
python_array[0][0]与array[0,0]的区别详解
Feb 18 #Python
Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解
Feb 18 #Python
Python如何实现小程序 无限求和平均
Feb 18 #Python
python_mask_array的用法
Feb 18 #Python
You might like
php针对cookie操作的队列操作类实例
2014/12/10 PHP
php自定文件保存session的方法
2014/12/10 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
导入extjs、jquery 文件时$使用冲突问题解决方法
2014/01/14 Javascript
fixedBox固定div漂浮代码支持ie6以上大部分主流浏览器
2014/06/26 Javascript
jquery实现相册一下滑动两次的方法
2015/02/09 Javascript
Vue.js每天必学之计算属性computed与$watch
2016/09/05 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
2017/05/09 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
2017/12/07 Javascript
babel的使用及安装配置教程
2018/02/22 Javascript
vue2中使用less简易教程
2018/03/27 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
[01:10:24]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第一场 2月28日
2021/03/11 DOTA
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
python 字典修改键(key)的几种方法
2018/08/10 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
Django视图类型总结
2021/02/17 Python
Timberland美国官网:全球领先的户外品牌
2016/08/15 全球购物
Java如何调用外部Exe程序
2015/07/04 面试题
汇科协同Java笔试题
2012/03/31 面试题
函授自我鉴定
2013/11/06 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
土建施工员岗位职责
2014/07/16 职场文书
干部个人对照检查材料
2014/08/25 职场文书
大学生感恩父母演讲稿
2014/08/28 职场文书
自查自纠工作情况报告
2014/10/29 职场文书
2016国培学习心得体会
2016/01/08 职场文书
Springboot/Springcloud项目集成redis进行存取的过程解析
2021/12/04 Redis
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫