Python有序查找算法之二分法实例分析
本文实例讲述了Python有序查找算法之二分法。分享给大家供大家参考,具体如下:
二分法是一种快速查找的方法,时间复杂度低,逻辑简单易懂,总的来说就是不断的除以2除以2...
例如需要查找有序数组arr里面的某个关键字key的位置,那么首先确认arr的中位数或者中点center,下面分为三种情况:
① 假如arr[center]>key,说明key在arr中心左边范围;
② 假如arr[center]<key,说明key在arr中心右边范围;
③ 假如arr[center]=key,说明key在arr中心。
范围每次缩小一半,写个while的死循环知道找到为止。
二分法查找非常快且非常常用,但是唯一要求是要求数组是有序的
前面一篇冒泡排序可以去看看:
//www.jb51.net/article/130288.htm
二分法的代码如下:
# -*- 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编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
相关推荐
-
Python实现查找最小的k个数示例【两种解法】
本文实例讲述了Python实现查找最小的k个数.分享给大家供大家参考,具体如下: 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 解法1 使用partition函数可以知道,使用==O(N)==的时间复杂度就可以找出第K大的数字,并且左边的数字比这个数小,右边的数字比这个数字大.因此可以取k为4,然后输出前k个数字,如果需要排序的话再对结果进行排序 # -*- coding:utf-8 -*- class So
-
python快速查找算法应用实例
本文实例讲述了Python快速查找算法的应用,分享给大家供大家参考. 具体实现方法如下: import random def partition(list_object,start,end): random_choice = start #random.choice(range(start,end+1)) #把这里的start改成random()效率会更高些 x = list_object[random_choice] i = start j = end while True: while li
-
Python中的二叉树查找算法模块使用指南
python中的二叉树模块内容: BinaryTree:非平衡二叉树 AVLTree:平衡的AVL树 RBTree:平衡的红黑树 以上是用python写的,相面的模块是用c写的,并且可以做为Cython的包. FastBinaryTree FastAVLTree FastRBTree 特别需要说明的是:树往往要比python内置的dict类慢一些,但是它中的所有数据都是按照某个关键词进行排序的,故在某些情况下是必须使用的. 安装和使用 安装方法 安装环境: ubuntu12.04, py
-
Python实现在某个数组中查找一个值的算法示例
第一种算法思路: 第一步:随机出来一个数组的下标 第二步:判断下标对应的值是否等于被查找的值,是的话终止,已找到,否的话转第三步. 第三步:判断是否随机完数组的所有下标,是的话终止,没找到,否的话转第一步. 代码如下: #本程序的功能是在字典中查找存在某个值 import random di = {'a':1,'b':2,'c':3,'d':4,'e':5,'f':6} key = 2 di1 = {} while True: tmp = random.choice(di.keys()) #随机
-
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
本文实例讲述了python找到最大或最小的N个元素实现方法.分享给大家供大家参考,具体如下: 问题:想在某个集合中找出最大或最小的N个元素 解决方案:heapq模块中的nlargest()和nsmallest()两个函数正是我们需要的. >>> import heapq >>> nums=[1,8,2,23,7,-4,18,23,42,37,2] >>> print(heapq.nlargest(3,nums)) [42, 37, 23] >&g
-
python二分查找算法的递归实现方法
本文实例讲述了python二分查找算法的递归实现方法.分享给大家供大家参考,具体如下: 这里先提供一段二分查找的代码: def binarySearch(alist, item): first = 0 last = len(alist)-1 found = False while first<=last and not found: midpoint = (first + last)//2 if alist[midpoint] == item: found = True else: if ite
-
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
本文实例讲述了Python使用min.max函数查找二维数据矩阵中最小.最大值的方法.分享给大家供大家参考,具体如下: 简单使用min.max函数来得到二维数据矩阵中的最大最小值,很简单,这是因为工作需要用到一个东西所以先简单来写了一下: #!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:找出来随机生成矩阵中的最大.最小值 ''' import time import random def random_matrix_ge
-
Python查找两个有序列表中位数的方法【基于归并算法】
本文实例讲述了Python查找两个有序列表中位数的方法.分享给大家供大家参考,具体如下: 今天做到的一个机试题目,很简单,这里简单记录一下: 我用的是归并的思想,当然还可以用递归的方法,下面是具体实现: #!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:找到两个有序列表的中位数 若列表总长度为奇数则直接返回中间下标的值 否则返回前一个值,如长度为6则返回下标为2处的值 ''' import random def rando
-
Python实现二分查找算法实例
本文实例讲述了Python实现二分查找算法的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python import sys def search2(a,m): low = 0 high = len(a) - 1 while(low <= high): mid = (low + high)/2 midval = a[mid] if midval < m: low = mid + 1 elif midval > m: high = mid - 1 else:
-
Python有序查找算法之二分法实例分析
本文实例讲述了Python有序查找算法之二分法.分享给大家供大家参考,具体如下: 二分法是一种快速查找的方法,时间复杂度低,逻辑简单易懂,总的来说就是不断的除以2除以2... 例如需要查找有序数组arr里面的某个关键字key的位置,那么首先确认arr的中位数或者中点center,下面分为三种情况: ① 假如arr[center]>key,说明key在arr中心左边范围: ② 假如arr[center]<key,说明key在arr中心右边范围: ③ 假如arr[center]=key,说明key
-
python有序查找算法 二分法实例解析
这篇文章主要介绍了python有序查找算法 二分法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 二分法是一种快速查找的方法,时间复杂度低,逻辑简单易懂,总的来说就是不断的除以2除以2... 但是需要注意: 待查找的序列区间单调有序 例如需要查找有序数组arr里面的某个关键字key的位置,那么首先确认arr的中位数或者中点center,下面分为三种情况: 假如arr[center]>key,说明key在arr中心左边范围: 假如arr[
-
Java二分查找算法实现代码实例
这篇文章主要介绍了Java二分查找算法实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 二分查找: 两种方式: 非递归方式和递归方式 主要思路: 对于已排序的数组(先假定是从小到大排序), 先定义两个"指针", 一个"指向"首元素low, 一个"指向"末尾元素high. 然后, 开始折半比较, 即让要查找的数与数组中间的元素(索引为 low+high/2)比较. 若要查找的数比中间数小
-
python通过opencv调用摄像头操作实例分析
实例源码: #pip3 install opencv-python import cv2 from datetime import datetime FILENAME = 'myvideo.avi' WIDTH = 1280 HEIGHT = 720 FPS = 24.0 # 必须指定CAP_DSHOW(Direct Show)参数初始化摄像头,否则无法使用更高分辨率 cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) # 设置摄像头设备分辨率 cap.set(cv
-
Python排序搜索基本算法之归并排序实例分析
本文实例讲述了Python排序搜索基本算法之归并排序.分享给大家供大家参考,具体如下: 归并排序最令人兴奋的特点是:不论输入是什么样的,它对N个元素的序列排序所用时间与NlogN成正比.代码如下: # coding:utf-8 def mergesort(seq): if len(seq)<=1: return seq mid=int(len(seq)/2) left=mergesort(seq[:mid]) right=mergesort(seq[mid:]) return merge(lef
-
Python排序搜索基本算法之插入排序实例分析
本文实例讲述了Python排序搜索基本算法之插入排序.分享给大家供大家参考,具体如下: 插入排序生活中非常常见,打扑克的时候人的本能就在用插入排序:把抽到的一张插入到手上牌的正确位置上.有两种插入排序方法,一种基于比较,另一种基于交换.代码如下: 1.基于比较的插入排序: # coding:utf-8 def insertionSort(seq): length=len(seq) for i in range(1,length): tmp=seq[i] for j in range(i,0,-1
-
Python排序搜索基本算法之冒泡排序实例分析
本文实例讲述了Python排序搜索基本算法之冒泡排序.分享给大家供大家参考,具体如下: 冒泡排序和选择排序类似,也是第n次把最小的元素排在第n的位置上,也是该元素的绝对位置,只是冒泡排序的过程中,其他的元素也逐渐向自己最终位置逼近.代码如下: def bubbleSort(seq): length=len(seq) for i in range(length): for j in range(length-1,i,-1): if seq[j-1]>seq[j]: seq[j-1],seq[j]=
-
python实现AHP算法的方法实例(层次分析法)
一.层次分析法原理 层次分析法(Analytic Hierarchy Process,AHP)由美国运筹学家托马斯·塞蒂(T. L. Saaty)于20世纪70年代中期提出,用于确定评价模型中各评价因子/准则的权重,进一步选择最优方案.该方法仍具有较强的主观性,判断/比较矩阵的构造在一定程度上是拍脑门决定的,一致性检验只是检验拍脑门有没有自相矛盾得太离谱. 相关的理论参考可见:wiki百科 二.代码实现 需要借助Python的numpy矩阵运算包,代码最后用了一个b1矩阵进行了调试,相关代码如下
随机推荐
- ionic3+Angular4实现接口请求及本地json文件读取示例
- swift相册相机的权限处理示例详解
- 详解mysql中的冗余和重复索引
- 玩转-SQL2005数据库行列转换
- 详谈js原型继承的一些问题
- MongoDB正则表达式及应用
- Linux下为Node.js程序配置MySQL或Oracle数据库的方法
- iOS实现视频和图片的上传思路
- javascript算法之二叉搜索树的示例代码
- js仿土豆网带缩略图的焦点图片切换效果实现方法
- js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
- PHP 在数组中搜索给定的简单实例 array_search 函数
- laravel学习笔记之模型事件的几种用法示例
- php下正则来匹配dede模板标签的代码
- Python实现查找系统盘中需要找的字符
- jQuery 绑定事件的方式总结
- 在命令行下运行PHP脚本[带参数]的方法
- 利用SQL语句给字段加注释的方法
- jQuery Validation实例代码 让验证变得如此容易
- 一些有用的JavaScript和jQuery的片段分享