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多线程编程(二):启动线程的两种方法
Apr 05 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
Mar 15 Python
Python中偏函数用法示例
Jun 07 Python
python opencv人脸检测提取及保存方法
Aug 03 Python
Python DataFrame.groupby()聚合函数,分组级运算
Sep 18 Python
详解Python中is和==的区别
Mar 21 Python
Python原始套接字编程实例解析
Jan 29 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
Feb 28 Python
Pandas实现一列数据分隔为两列
May 18 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 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实现框架(二)
2006/10/09 PHP
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
基于php设计模式中单例模式的应用分析
2013/05/15 PHP
PHP实现的oracle分页函数实例
2016/01/25 PHP
限制复选框的最大可选数
2006/07/01 Javascript
ext读取两种结构的xml的代码
2008/11/05 Javascript
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
JavaScript eval() 函数介绍及应用示例
2014/07/29 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
基于JQuery打造无缝滚动新闻步骤详解
2016/03/31 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
bootstrap table 多选框分页保留示例代码
2017/03/08 Javascript
JavaScript实现反转字符串的方法详解
2017/04/27 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
Typescript 中的 interface 和 type 到底有什么区别详解
2019/06/18 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
python中类的一些方法分析
2014/09/25 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
2018/03/19 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
对python中list的五种查找方法说明
2020/07/13 Python
奥地利网上书店:Weltbild
2017/07/14 全球购物
有个性的自我评价范文
2013/11/15 职场文书
护理专业自荐信
2013/12/03 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
运动与健康自我评价
2015/03/09 职场文书
安全员岗位职责范本
2015/04/11 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
2015年党风廉政建设个人总结
2015/08/18 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
MySQL实现配置主从复制项目实践
2022/03/31 MySQL
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL