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基础教程之自定义函数介绍
Aug 29 Python
Python命令启动Web服务器实例详解
Feb 23 Python
Python实现将16进制字符串转化为ascii字符的方法分析
Jul 21 Python
python修改list中所有元素类型的三种方法
Apr 09 Python
浅谈Python中重载isinstance继承关系的问题
May 04 Python
python 列表降维的实例讲解
Jun 28 Python
python3实现点餐系统
Jan 24 Python
python三引号输出方法
Feb 27 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
Python算法中的时间复杂度问题
Nov 19 Python
Python爬虫实现vip电影下载的示例代码
Apr 20 Python
python的netCDF4批量处理NC格式文件的操作方法
Mar 21 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
接收键盘指令的脚本
2006/06/26 Javascript
javascript hashtable实现代码
2009/10/13 Javascript
10款非常有用的 Ajax 插件分享
2012/03/14 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
在JavaScript中正确引用bind方法的应用
2015/05/11 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
Three.js基础学习教程
2017/11/16 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
React实现阿里云OSS上传文件的示例
2020/08/10 Javascript
es5 类与es6中class的区别小结
2020/11/09 Javascript
[04:02]2014DOTA2国际邀请赛 BBC每日综述中国战队将再度登顶
2014/07/21 DOTA
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
Python多线程学习资料
2012/12/19 Python
对于Python的Django框架使用的一些实用建议
2015/04/03 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
JSON Web Tokens的实现原理
2017/04/02 Python
Python递归函数实例讲解
2019/02/27 Python
Django异步任务之Celery的基本使用
2019/03/23 Python
pandas读取CSV文件时查看修改各列的数据类型格式
2019/07/07 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
德国领先的大尺码和超大尺码男装在线零售商:Bigtex
2019/06/22 全球购物
客户表扬信范文
2014/01/10 职场文书
病人慰问信范文
2015/02/15 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL