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获得图片base64编码示例
Jan 16 Python
shelve  用来持久化任意的Python对象实例代码
Oct 12 Python
Python实现一个转存纯真IP数据库的脚本分享
May 21 Python
在Python中执行系统命令的方法示例详解
Sep 14 Python
python3.0 模拟用户登录,三次错误锁定的实例
Nov 02 Python
python抓取文件夹的所有文件
Feb 27 Python
Linux下python制作名片示例
Jul 20 Python
python 定义n个变量方法 (变量声明自动化)
Nov 10 Python
用python写测试数据文件过程解析
Sep 25 Python
爬虫代理池Python3WebSpider源代码测试过程解析
Dec 20 Python
python dataframe NaN处理方式
Dec 26 Python
python numpy数组复制使用实例解析
Jan 10 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 获取一个月第一天与最后一天的代码
2010/05/16 PHP
PHP安全技术之 实现php基本安全
2010/09/04 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
PHP无限分类(树形类)
2013/09/28 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
2014/06/12 PHP
PHP多个文件上传到服务器实例
2014/10/29 PHP
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
JS 实现导航栏悬停效果
2013/09/23 Javascript
jQuery中prepend()方法用法实例
2014/12/25 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
基于javascript实现表格的简单操作
2016/05/21 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
基于JavaScript实现移动端无限加载分页
2017/03/27 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
Vue Prop属性功能与用法实例详解
2019/02/23 Javascript
[01:19:46]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第一场 2月28日
2021/03/11 DOTA
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
Python 26进制计算实现方法
2015/05/28 Python
详解python中的文件与目录操作
2017/07/11 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
python打印直角三角形与等腰三角形实例代码
2019/10/20 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
html5图片上传预览示例分享
2014/04/14 HTML / CSS
给学校建议书范文
2014/05/13 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
海洋科学专业求职信
2014/08/10 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
2015年宣传工作总结
2015/04/08 职场文书
安全员岗位职责范本
2015/04/11 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL