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的id()函数介绍
Feb 10 Python
Python help()函数用法详解
Mar 11 Python
Python判断Abundant Number的方法
Jun 15 Python
Python连接phoenix的方法示例
Sep 29 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
Python实现繁体中文与简体中文相互转换的方法示例
Dec 18 Python
Python远程视频监控程序的实例代码
May 05 Python
anaconda如何查看并管理python环境
Jul 05 Python
Python编程中类与类的关系详解
Aug 08 Python
python解释器spython使用及原理解析
Aug 24 Python
对Django的restful用法详解(自带的增删改查)
Aug 28 Python
python 实现图像快速替换某种颜色
Jun 04 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面向对象全攻略 (九)访问类型
2009/09/30 PHP
PHP详解ASCII码对照表与字符转换
2011/12/05 PHP
PHP 验证码不显示只有一个小红叉的解决方法
2013/09/30 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
用于节点操作的API,颠覆原生操作HTML DOM节点的API
2010/12/11 Javascript
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
2012/01/13 Javascript
Js Jquery创建一个弹出层可加载一个页面
2014/05/08 Javascript
使用angular写一个hello world
2015/01/23 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
2020/04/28 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
2016/08/15 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
2017/08/29 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
nodejs操作mongodb的填删改查模块的制作及引入实例
2018/01/02 NodeJs
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
2020/04/01 jQuery
Python中针对函数处理的特殊方法
2014/03/06 Python
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
Python实现的栈(Stack)
2018/01/26 Python
python3.7添加dlib模块的方法
2020/07/01 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
香港现代设计家具品牌:Ziinlife Furniture
2018/11/13 全球购物
成教毕业生自我鉴定
2013/10/23 职场文书
优秀毕业自我鉴定
2014/02/15 职场文书
实习生岗位职责
2014/04/12 职场文书
IT工程师岗位职责
2014/07/04 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB