二分查找假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

  • 优点:比较次数少,查找速度快,平均性能好;
  • 缺点:要求待查表为有序顺序表,且插入删除困难。
  • 二分查找方法适用于不经常变动而查找频繁的有序列表。
  • 二分查找最优时间复杂度是 O ( 1 ) O(1) O(1),最坏时间复杂度为 O ( l o g 2 n ) O(log_2n) O(log2​n)。
    假设总共有 n n n个元素,查找操作次数为 k k k,则每次查找的区间大小就是 n , n 2 , n 4 , … , n 2 k n,\frac{n}{2},\frac{n}{4},…,\frac{n}{2^k} n,2n​,4n​,…,2kn​(接下来操作元素的剩余个数)。最好第一次操作就找到元素,时间复杂度为 O ( n ) O(n) O(n),最坏最后剩余的一个元素才是要查找的元素,即 n 2 k = 1 ⟹ k = l o g 2 n \frac{n}{2^k}=1\Longrightarrow k=log_2n 2kn​=1⟹k=log2​n(假设是整数),时间复杂度为 O ( l o g 2 n ) O(log_2n) O(log2​n)

递归实现二分查找

# 返回 x 在 arr 中的索引,如果不存在返回 -1
def binarySearch (arr, l, r, x): # 基本判断if l <= r: mid = (l+r)//2# 元素整好的中间位置if arr[mid] == x: return mid # 元素小于中间位置的元素,只需要再比较左边的元素elif arr[mid] > x: return binarySearch(arr, l, mid-1, x) # 元素大于中间位置的元素,只需要再比较右边的元素else: return binarySearch(arr, mid+1, r, x) else: # 不存在return -1# 函数调用
result = binarySearch(arr, 0, len(arr)-1, x)

非递归实现二分查找

def binarySearch (arr, x): n=len(arr)l,r=0,n-1while l<=r:mid=(l+r)//2if arr[mid]==x:return midelif arr[mid]>xr=mid-1else:l=mid+1return -1

二分查找时间复杂度及其Python实现相关推荐

  1. 二分查找时间复杂度的计算

    二分查找(Binary Search) 1.使用条件: ①线性表采用顺序存储结构. ②表中元素按关键字有序排列. 2.时间复杂度:O(log2n) 3.推算过程: 假设序列里共有n个元素, 第一次,在 ...

  2. python二分查找时间复杂度_时间复杂度 二分查找

    时间复杂度 时间复杂度是用来估计算法运行时间的一个式子(单位). 一般来说,时间复杂度高的算法比复杂度低的算法慢. 常见的时间复杂度(按效率排序) O(1) < O(log n) < O( ...

  3. python二分查找时间复杂度_二分查找算法的时间复杂度计算(logN)

    二分查找算法的时间复杂度计算(logN) 马富天 2019-08-10 20:25:24 54 [摘要]二分查找算法是对顺序查找算法的优化,二分查找算法的前提是数列是一个有序数列,递增或者递减,本文就 ...

  4. 递归二分查找时间复杂度、空间复杂度和稳定性

    递归 递归条件 自己调用自己 有结束条件 二分查找 二分查找对1~100乱序数字查找 l = list(range(1,101)) def bin_search(data_set,val):low = ...

  5. 二分查找时间复杂度分析

    主要还是从算法所占用的「时间」和「空间」两个维度去考量. 时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述. 空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂 ...

  6. 顺序查找与二分查找时间复杂度的比较

    注意要点:通过System.currentTimeMills();来获取当前时间,来计算该算法运行运算时间 ​​​​​​​顺序查找的时间复杂度为O(n) 二分查找的时间复杂度为O(log(n)) 但两 ...

  7. 解析二分查找时间复杂度

    话不多说,先来段二分查找的代码. #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int BinSearch(int arr[], in ...

  8. 快速排序和二分查找时间复杂度详解

    因为二分查找每次排除掉一半的不适合值,所以对于n个元素的情况:一次二分剩下:n/2两次二分剩下:n/2/2 = n/4...m次二分剩下:n/(2^m)在最坏情况下是在排除到只剩下最后一个值之后得到结 ...

  9. 二分查找时间复杂度计算与分析

    二分查找:   二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是 ...

最新文章

  1. java中的foreach语句
  2. 彻底弄懂C语言数组名
  3. 申请英国学校最晚什么时候考出雅思呢?
  4. ubuntu18.04下安装中文输入法
  5. GCC编译过程以及对应FILE文件表
  6. 专家称 AI 可以在 120 年内接管人类的所有工作
  7. 给表中指定位置添加字段_利用VBA代码,轻松完成向工作表中添加指定图片到指定位置...
  8. mongodb查询的语法(大于,小于,大于或等于,小于或等于等等)
  9. @suppressWarnings解释
  10. Matlab读取TXT文本文件通用程序
  11. 2021 Summary
  12. 仅需3 小时,如何用 AI 做场景贴图,完成场景制作 ?AI创作工作流探索
  13. java crumb_vuex中,我在index.vue组件设置的值,为什么在另外一个组件crumb.vue获取不到...
  14. gif制作——电脑完全免费GIF录制工具下载
  15. 为什么要用Handler,怎么用Handler
  16. BJOI2019 奥术神杖
  17. Python变量与字符串操作
  18. 为什么我的淘宝排名会突然下降?
  19. 华为java面试题目
  20. 细分市场——电视重生 | 《商业价值》杂志

热门文章

  1. Python OpenCV 3.x 示例:6~11
  2. Source Insight 设置和快捷键大全
  3. 股票学习-20220613
  4. 无人驾驶:高精地图与定位
  5. 数据可视化之matplotlib实战:plt.pie() 绘制内嵌环形饼图
  6. 必备收藏!9种工具让开发员工作更高效、生活更轻松
  7. python显示gif图片_利用Python制作GIF图片
  8. CSDN周赛第32期:赢图书《金融级IT架构:数字银行的云原生架构解密》 和定制周边
  9. 又订阅了万维刚的精英日课
  10. 网易人工智能受邀出席第二届云创大会