二分查找法:在我的理解中这个查找方法为什么会叫二分呢,我认为是将要查询的一个列表分成了两份,然后在利用某个值来进行比较,在一个不断循环的过程中来找出我们要找的某一个值。

废话不多说,先上代码:

 def twofenfind(lst, target):
left = 0
right = len(lst) - 1 while target in lst:
mid = (left + right) // 2
if target > lst[mid]:
left = mid + 1 elif target < lst[mid]:
right = mid - 1 else:
return mid
return None print(twofenfind([1, 2, 3 ,4, 7], 3))
# 代码有些地方可能会有歧义,但这也仅仅只是我个人的一些理解(如有错误还请指正)。

二分查找发是一个效率很高的查找法,但是被查找的数据必须是有序的。

首先,将待查找target值与有序列表lst[0]到lst[n - 1]的中间位置——记为mid上的结点的关键字进行比较,如果相等就完成查找;否则,若lst[mid]>target,则说明待查找的数只可能在列表左边

lst[0]-lst[mid - 1]中,只需要在左边的列表中进行查找;若lst[mid] > x,则在右边的列表lst[mid + 1] 到 lst[n - 1]中继续进行查找,这样经过一次,关键字的比较就缩小了一半的查找区间。

然后继续按照上面的方法进行查找,然后知道找到关键字为target的元素或者当前查找区间为空(即表明查找失败)为止。

下面测试一下,以查找target:13为例:

当中取mid的关键字和target进行比较,很显然13 < 17,所以要查找的13应该是在前半部分的,所以下次查找的区间应该是在[0,5],即left的值不变仍然为0,right的值变为mid - 1 = 5,所以

mid = len(right + left) // 2 = 2(这里要进行整除)

取11和13进行比较,显然13 > 11, 所以要查找的值应该是在11后面的,所以left就变为了mid + 1 ,right的值仍然不变,取得最终的值mid = 3

取mid指示的位置的关键字13和target进行比较,结果相等,就说明查找成功了,所以target在列表中的位置即为mid所指示的位置。(我是按照索引来查找的)

python --- 二分查找算法的更多相关文章

  1. 两种方法实现Python二分查找算法

    两种方法实现Python二分查找算法   一. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 arr=[1,3,6,9,10,20,30] def findnumber( ...

  2. Python二分查找算法

    Python 二分查找算法: 什么是二分查找,二分查找的解释: 二分查找又叫折半查找,二分查找应该属于减值技术的应用,所谓减值法,就是将原问题分成若干个子问题后,利用了规模为n的原问题的解与较小规模( ...

  3. python——二分查找算法

    从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半   二分查找: 在一段数字内,找到中间值,判断要找的值和中间值大小的比较. 如果中间值大一些,则在 ...

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

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

  5. python实现二分查找算法

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

  6. 二分查找算法(Python版)

    [本文出自天外归云的博客园] 记性不好(@.@),所以平时根本用不到的东西就算学过如果让我去想也会需要很多时间(*.*)! 二分查找算法 在一个有序数组中查找元素最快的算法,也就是折半查找法,先找一个 ...

  7. Python——递归、二分查找算法

    递归函数 1. 递归 (1)什么是递归:在函数中调用自身函数(2)最大递归深度:默认997/998——是Python从内存角度出发做的限制 n = 0 def story(): global n n+ ...

  8. Python递归函数和二分查找算法

    递归函数:在一个函数里在调用这个函数本身. 递归的最大深度:998 正如你们刚刚看到的,递归函数如果不受到外力的阻止会一直执行下去.但是我们之前已经说过关于函数调用的问题,每一次函数调用都会产生一个属 ...

  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. 【bzoj3573】[HNOI2014]米特运输

    题目描述 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都.这N个城 ...

  2. R 给data.frame(dataframe)添加一列

    x<-data.frame(apple=c(1,4,2,3),pear=c(4,8,5,2)) x # apple pear # 1 1 4 # 2 4 8 # 3 2 5 # 4 3 2 x$ ...

  3. 0-N背包为题(动态规划算法)

    /****************0-N背包问题****************** * 有n个物体装入容量为c的背包,每一个物体有一个体积 * 和一个价值,所装入的物体体积之和不大于背包体积, * ...

  4. css3绘制中国结

    <!doctype html> <html> <head> <title></title> <meta charset='utf-8' ...

  5. table强制不换行

    用iframe做了一个查询,里面有一个表格,结果当页面内容多的时候挤在了一起. 上图:

  6. sass ruby环境 安装配置,使用sublime text3 中sass

    首先,你想要使用sass的话,就必须依赖于ruby环境.所以,你要下一个ruby.具体的链接应该是(http://rubyinstaller.org/downloads).下载相应的版本.- 下载好之 ...

  7. awk 使用案例

    1.输出占用率超过60%的分区 df -h | awk 'BEGIN{print "Full Partition"}NR>1{gsub("%"," ...

  8. 编译错误:expected an indented block

    python 对缩进要求非常严格,当运行时出现以下几种情况时,就需要修改缩进: 1.expected an indented block 直接缩进4个space空格或者一个tab.

  9. 33.Linux-实现U盘自动挂载(详解)

    1.当我们每次插入u盘后,都会自动创键U盘的设备节点/dev/sda%d 这是因为里面调用了device_create()实现的, busybox的mdev机制就会根据主次设备号等信息,在/dev下创 ...

  10. react img 被自动转成base64,无法根据当前路径来动态改变值的解决办法

    项目需求,需要根据当前的图片的路径值的来(加或者减)动态改变其值: state定义如下: this.state={ basket01:0+require("../../img/egg/egg ...