[本文出自天外归云的博客园]

前提:升序数组,待查元素在数组中。

二分查找:就是一个递归函数c。待查元素a,当前数组中位数b,如果b=a则返回b的索引,b>a则在b左侧的子数组中调用函数c,否则在b右侧子数组中调用函数c。

第一次思考,按着上面的思路编程后的结果:

def binary_search(index, a, value):if a[(len(a) - 1) // 2] == value:return index + (len(a) - 1) // 2elif a[(len(a) - 1) // 2] < value:return binary_search(index + (len(a) - 1) // 2 + 1, a[(len(a) - 1) // 2 + 1:], value)else:return binary_search(index, a[0:(len(a) - 1) // 2 + 1], value)

第二次思考,简化中位数计算逻辑:

def binary_search(index, a, value):if a[len(a) // 2] == value:return index + len(a) // 2elif a[len(a) // 2] < value:return binary_search(index + len(a) // 2, a[len(a) // 2:], value)else:return binary_search(index, a[0:len(a) // 2], value)

第三次思考,去掉return,改为lambda形式:

binary_search = lambda index,a,value: index + len(a) // 2 if a[len(a) // 2] == value else binary_search(index + len(a) // 2, a[len(a) // 2:], value) if a[len(a) // 2] < value else binary_search(index, a[0:len(a) // 2], value)

以上就是二分查找变为“一行代码”版的过程。

运行测试:

if __name__ == '__main__':a = [1, 2, 33, 43, 52, 66, 88, 99, 111, 120]print(f"Target index: {binary_search(0, a, value=33)}")

结果如下:

Pythonic版二分查找相关推荐

  1. swift版 二分查找 (折半查找)

    二分查找作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围之内,大大缩短了搜索时间,但它有一个前提,就是必须在有序数据中进行查找.废话少说,直接上代码,可复制粘贴直接出结果! import ...

  2. LintCode 1692. 组队打怪(田忌赛马,二分查找)

    1. 题目 你现在有n个英雄,每个英雄的战斗力为 atk1,你要用这些英雄去对付n个怪物,每个怪物的战斗力为atk2. 在一场战斗中,你需要安排每个英雄分别与一个怪兽战斗,如果英雄战斗力高于怪兽,那个 ...

  3. 算法2(二分查找法)

    使用二分查找法的前置条件 必须是一个已经排好序的数组 二分查找定义 从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半. 示例图 循环版二分查找法 d ...

  4. 数据结构与算法《二分查找》

    数据结构与算法(java)<二分查找> 基本二分查找public class BinarySearch {/*** 1.定义一个有序数组,* 2.定义两个变量i,j* 3.定义一个待查找的 ...

  5. 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。

    十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...

  6. 二分查找——细节决定成败

    本文内容参考如下 详解二分查找算法 感谢这位大神的学习分享 二分查找仿佛是个知道编程的人都听说过的算法,思路非常简单,菜鸟在前文中也有说过,但却对降低顺序查找的时间复杂度有奇效.在做题的过程中,发现二 ...

  7. 1.1.10 从二分查找BinarySearch开启算法学习之路---《java算法第四版》

    文章目录 0.前言 1.功能 2.示例 有两个名单tinyW.txt和tinyT.txt,将tinyT.txt名单中不在tinyW.txt的数据打印出来 ① 实现原理 ② 实现代码 ③ 性能分析 0. ...

  8. php折半查找算法,二分查找 [折半查找] 算法 PHP 版

    查找表:就是同一类型的数据元素构成的数据集合 有静态表和动态表 本文实现PHP版的二分查找算法[本算法仅用于顺序存储的查找表] /** * Created by PhpStorm. * User: 1 ...

  9. 关于《算法(第四版 谢路云译)》标准库In、Out、StdOut和StdIn的正确配置和调用经验分享(以BinarySearch二分查找算法为例)

    本人初学<算法(第四版 谢路云译)>有一段时间了,对于初学者按书敲完第一个BinarySearch二分查找算法发现运行错误,我相信大家跟我一样内心是崩溃的.还好经过翻看多个相关论坛以及自己 ...

最新文章

  1. 吴恩达新书《Machine Learning Yearning》手稿完工,现在全集免费下载!(附pdf下载)
  2. 前端工作面试问题(下)
  3. 【Word】一些实用的小技巧
  4. beego 访问网络_Go--Beego新建项目(解决不能访问的问题)
  5. malloc开辟的空间在哪一个区间_专业指南 | 室内设计和空间设计区别,到底该选哪一个?...
  6. 关于Js下拉导航的解释
  7. python的numpy安装_python的numpy安装方法大全
  8. 林子雨大数据技术原理总结
  9. 【项目难点】电商后台管理系统
  10. audio realtek 耳机没声_解决Realtek High Definition Audio 声卡前面板耳机无声音方法
  11. matlab sor解线性方程组,解线性方程组的SOR迭代法及其MATLAB实现.pdf
  12. matlab 循环和判断语句,matlab中循环语句与for循环
  13. thinkphp使用easywechat接入微信公众号
  14. win10拨号上网开启热点
  15. Linux系统配置DNS服务器
  16. php 指纹验证失败,为什么手指沾了水,指纹识别就会失效?液体会导致指纹解锁失败?...
  17. HTTP状态码:400\500 错误代码(个人总结)
  18. PHP 连接sql server
  19. 这样走能实现读博梦想吗?
  20. Stm32 学习笔记(1)我所使用的板子

热门文章

  1. 转:关于数据库压缩技术的Survey
  2. 一些gassian分布假设的,并假设均值依赖于隐藏层,方差固定的模型
  3. C# 从Object对象中读取属性的值
  4. Java学习笔记_180704_final和static关键字
  5. 2018软件工程第九次作业(团队四)
  6. 在微信中调用ajax出现的问题
  7. 《推荐系统实践》笔记(转)
  8. 内容分发系统MediaEW:助新闻媒体转投HTML5
  9. 驰骋开源软件一体化产品线,工作流程引擎,OA系统,即时通讯,单点登陆。
  10. C/C++ 存储类型 作用域 连接类型