二分查找——Python实现

一、排序思想

二分(折半)查找思想请参见: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))

原文地址:https://www.cnblogs.com/luomeng/p/10676380.html

时间: 2024-12-19 23:40:07

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

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

# -*- coding: utf-8 -*- number_list = [0, 1, 2, 3, 4, 5, 6, 7] def linear_search(value, iterable): for index, val in enumerate(iterable): if val == value: return index return -1 assert linear_search(5, number_list) == 5 def linear_search_v2(predicate

python算法之二分查找

说明:大部分代码是在网上找到的,好几个代码思路总结出来的 通常写算法,习惯用C语言写,显得思路清晰.可是假设一旦把思路确定下来,并且又不想打草稿.想高速写下来看看效果,还是python写的比較快.也看个人爱好.实习的时候有个同事对于python的缩进来控制代码块各种喷....他认为还是用大括号合适...怎么说呢,适合自己的才是最好的.我个人的毛病就是,写了几天C,到要转到python的时候,代码中依旧有C的影子..比方大括号问题,比方忘记在while或这for.if.else等后面加":&quo

python函数:递归函数及二分查找算法

本文和大家分享的主要是python的递归函数及二分查找算法相关内容,一起来看看吧,希望对大家学习python有所帮助. 一.递归的定义 def story(): s = """ 从前有个山,山里有座庙,庙里老和尚讲故事, 讲的什么呢? """ print(s) story() story() 老和尚讲故事 递归的定义 -- 在一个函数里再调用这个函数本身.这种魔性的使用函数的方式就叫做 递归 . 递归的最大深度:997 1.python递归最大层

Python 实现二分查找算法

最近在学习python,由于在面试中,二分查找算法面试率极高,所以使用python做了一个实现. def search1(sequence, number): lower = 0 upper = len(sequence) - 1 while lower <= upper: mid = (lower + upper) // 2 if number > sequence[mid]: lower = mid + 1 elif number < sequence[mid]: upper = m

二分查找算法的Python实现

问题 二分查找 list.index()无法应对大规模数据的查询,需要用其它方法解决,这里谈的就是二分查找 思路说明 在查找方面,python中有list.index()的方法.例如: >>> a=[2,4,1,9,3] #list可以是无序,也可以是有序 >>> a.index(4) #找到后返回该值在list中的位置 1 >>> a.index(5) #如果没有该值,则报错 Traceback (most recent call last): Fi

Python 迭代器&amp;生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发

本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果,结果必须与真实的计算器所得出的结果一致 迭代器&

Python实现二分查找法

二分查找可以解决(预排序数组的查找)问题:只要数组中包含T(即要查找的值),那么通过不断缩小包含T的范围,最终就可以找到它.一开始,范围覆盖整个数组.将数组的中间项与T进行比较,可以排除一半元素,范围缩小一半.就这样反复比较,反复缩小范围,最终就会在数组中找到T,或者确定原以为T所在的范围实际为空.对于包含N个元素的表,整个查找过程大约要经过log(2)N次比较. #!/usr/bin/env python # -*- coding: utf-8 -*- def func(l, n): if n

python实现二分查找及bisect模块的简介

在查找方面,python中有list.index()的方法. <span style="font-size:14px;">>>> a=[2,4,1,9,3] #list可以是无序,也可以是有序 >>> a.index(4) #找到后返回该值在list中的位置 1</span> 这是python中基本的查找方法,虽然简单,但是,如果由于其时间复杂度为O(n),对于大规模的查询恐怕是不足以胜任的.二分查找就是一种替代方法. 二分查

python实现二分查找

二分法查找:在一组有序的数据中进行查找,首先与中间的数先比较,如果查找的数大于中间的数,则要查找的数在前半段,否则在后半段,这样就会排除一半的数据,如此递归进行下去,则会极大的提高查找的速度.下面利用python代码实现二分查找 def binary_search(array,key): low = 0 high = len(array) - 1 while low < high: mid = int((low + high)/2) if key < array[mid]: high = mi