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安装教程 Pycharm安装详细教程
May 02 Python
Python语言实现百度语音识别API的使用实例
Dec 13 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
Mar 13 Python
Python反转序列的方法实例分析
Mar 21 Python
python smtplib模块实现发送邮件带附件sendmail
May 22 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
Nov 10 Python
python实现五子棋游戏
Jun 18 Python
tornado+celery的简单使用详解
Dec 21 Python
Django 自定义404 500等错误页面的实现
Mar 08 Python
iPython pylab模式启动方式
Apr 24 Python
详细分析Python垃圾回收机制
Jul 01 Python
Pytest单元测试框架如何实现参数化
Sep 05 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
很实用的一个完整email发送程序
2006/10/09 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
基于PHP文件操作的详细诠释
2013/06/21 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
JavaScript 密码强度判断代码
2009/09/05 Javascript
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
初识Javascript小结
2015/07/16 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
javaScript语法总结
2016/11/25 Javascript
利用jquery实现实时更新歌词的方法
2017/01/06 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
js实现旋转的星空效果
2019/11/01 Javascript
vue实现下拉菜单树
2020/10/22 Javascript
Python基于正则表达式实现计算器功能
2020/07/13 Python
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
优秀民警事迹材料
2014/01/29 职场文书
说明书范文
2014/05/07 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
2015年汽车销售工作总结
2015/04/07 职场文书
学校财务管理制度
2015/08/04 职场文书
python实现三阶魔方还原的示例代码
2021/04/28 Python
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
浅谈Python协程asyncio
2021/06/20 Python
什么是Python装饰器?如何定义和使用?
2022/04/11 Python
Django框架中视图的用法
2022/06/10 Python