一、排序思想

二分(折半)查找思想请参见:https://www.cnblogs.com/luomeng/p/10585291.html

二、python实现

def binarySearchDemo(arr, key):
"""
python二分查找非递归方式
:param arr:待排序列,有序集合
:param key:带查找元素
"""
low = 0
high = len(arr) - 1 while low <= high:
mid = (low + high) // 2 if key > arr[mid]:
low = mid + 1
elif key < arr[mid]:
high = mid - 1
else:
return mid
return -1 def binarySearchDemo2(arr, start, end, key):
"""
python二分查找递归方式
:param arr:待排序列,有序集合
:param start:待排序列,开始位置
:param end:待排序列,结束位置
:param key:带查找元素
"""
if start > end:
return -1 mid = (start + end) // 2 if key > arr[mid]:
return binarySearchDemo2(arr, mid + 1, end, key)
elif key < arr[mid]:
return binarySearchDemo2(arr, start, mid - 1, key)
else:
return mid nums = [6, 12, 33, 87, 90, 97, 108, 561] # 非递归实现
print(binarySearchDemo(nums, 90)) # 递归实现
print(binarySearchDemo2(nums, 0, len(nums) - 1, 90))

二分查找——Python实现的更多相关文章

  1. 二分查找-python

    约12年年底的时候,接触了python不到半年的样子,入门是直接实现GUI测试case的.今天面试地平线机器人,发现忘得差不多了- -. 当时的问题是这样的 写一个二分查找是实现,我好像不记得二分查找 ...

  2. 线性查找与二分查找(python)

    # -*- coding: utf-8 -*- number_list = [0, 1, 2, 3, 4, 5, 6, 7] def linear_search(value, iterable): f ...

  3. 二分查找 python实现

    欢迎回来 [^first blood]. 要求A是升序数组 递归 只能查 数据存不存在,不能返回下标 def binary_find(A, m): if len(A) == 0: return -1 ...

  4. 算法:二分查找(python版)

    #!/usr/bin/env python #coding -*- utf:8 -*- #二分查找#时间复杂度O(logn)#一个时间常量O(1)将问题的规模缩小一半,则O(logn) import ...

  5. python算法之二分查找

    说明:大部分代码是在网上找到的,好几个代码思路总结出来的 通常写算法,习惯用C语言写,显得思路清晰.可是假设一旦把思路确定下来,并且又不想打草稿.想高速写下来看看效果,还是python写的比較快.也看 ...

  6. python函数(4):递归函数及二分查找算法

    人理解循环,神理解递归!  一.递归的定义 def story(): s = """ 从前有个山,山里有座庙,庙里老和尚讲故事, 讲的什么呢? ""& ...

  7. python实现二分查找算法

    二分查找算法也成为折半算法,对数搜索算法,一会中在有序数组中查找特定一个元素的搜索算法.搜索过程是从数组中间元素开始的 如果中间元素正好是要查找的元素,则搜索过程结束:如果查找的数大于中间数,则在数组 ...

  8. Python实现二分查找

    老生常谈的算法了. #!/usr/bin/python # -*- coding:utf-8 -*- # Filename: demo.py # 用python实现二分查找 def binarySea ...

  9. python关于二分查找

    楔子 如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做? l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72 ...

随机推荐

  1. Vagrant更改默认的SSH端口

    Vagrant默认转发宿主的2222端口到虚拟机的22端口(默认设置,无须配置).在有多个虚拟机并存的情况下,2222端口将不好使.具体表现在: 启动第二个虚拟机的时候,会报端口占用错误: $ vag ...

  2. ubuntu14.04安装zabbix

    1. apt-get updateapt-get install apache2 mysql-server libapache2-mod-php5 php5-gd php5-mysql php5-co ...

  3. iOS 本地时间、UTC时间、时间戳等操作、获取当前年月日

    //获得当前时间并且转为字符串 - (NSString *)dateTransformToTimeString { NSDate *currentDate = [NSDate date];//获得当前 ...

  4. 2016级算法第三次上机-C.AlvinZH的奇幻猜想——三次方

    905 AlvinZH的奇幻猜想--三次方 思路 中等题.题意简单,题目说得简单,把一个数分成多个立方数的和,问最小立方数个数. 脑子转得快的马上想到贪心,从最近的三次方数往下减,反正有1^3在最后撑 ...

  5. JS之判断json对象中是否含有某个key值

    var json = {"key1":"val1","key2":"val2","key3":&qu ...

  6. java8特性之Lambda表达式

    1.典型的用Lambda表达式的场景 如果有这样的一个小应用,其中的一个类Student包含姓名(name),性别(sex),分数(score),如下: package demo; public cl ...

  7. 2018牛客多校1 - J Different Integers 莫队/主席树签到

    题意:给出n<5e4,a[1...n],单次1e5总次1e6次查询除去区间(L,R)的数的个数 开场5分钟:莫队是不可能莫队的,这道题是不可能莫队的 最后1小时:真香 具体操作没啥特别的,注意一 ...

  8. C#编写运行在Linux环境下的采用Mediainfo来获取多媒体文件信息的代码

    项目开始设计的是运行在windows下,所以一开始采用的是windows服务模式来获取多媒体文件信息,后来要求调整为可以在Linux下运行,经过这两天的资料查找,实现了Linux下通过.NET来获取多 ...

  9. Ubuntu 16.04安装IntelliJ出品的数据库管理工具DataGrip

    IntelliJ出品的东西有一个共同特定,就是代码提示做的非常好. DataGrip是除了MySQL Workbench之外的另一个选择. 一.下载 https://www.jetbrains.com ...

  10. Dijkstra算法以及各种海量数据排序算法

    一.Dijkstra最短路径算法 是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 实现一 // // D ...