二分查找(折半查找)

二分,查找,折半 · 浏览次数 : 6

小编点评

**博客地址:**https://www.cnblogs.com/zylyehuo/时间复杂度:O(logn)# **_*_coding:utf-8_*_def binary_search(li, val): ** left = 0 right = len(li) - 1 ** 这表示查找的范围为数组的左侧和右侧。 **while left <= right:** 这表示在当前搜索范围内搜索的范围不为空。 **if li[mid] == val:** 如果找到匹配的值,则返回搜索的中间位置。 **elif li[mid] > val:** 如果查找的值在搜索的中间左侧,则右位置应减小。 **else:** 如果查找的值在搜索的中间右侧,则左位置应增大。 **else:** 如果找不到匹配的值,则返回 `None`。 **return None** **归纳总结:** 该函数使用二分搜索算法来查找数组中的值。算法通过不断缩小搜索范围来逐步找到匹配的值。时间复杂度为 O(logn),其中 n 是数组的大小。

正文

博客地址:https://www.cnblogs.com/zylyehuo/

时间复杂度:O(logn)

# _*_coding:utf-8_*_

def binary_search(li, val):
    left = 0
    right = len(li) - 1
    while left <= right:  # 候选区有值
        mid = (left + right) // 2
        if li[mid] == val:
            return mid
        elif li[mid] > val:  # 带查找的值在mid左侧
            right = mid - 1
        else:  # li[mid] < val 带查找的值在mid右侧
            left = mid + 1
    else:
        return None


li = list(range(1000))
print(binary_search(li, 389))

与二分查找(折半查找)相似的内容:

二分查找(折半查找)

博客地址:https://www.cnblogs.com/zylyehuo/ 时间复杂度:O(logn) # _*_coding:utf-8_*_ def binary_search(li, val): left = 0 right = len(li) - 1 while left <= right

PixiJS源码分析系列: 第一章 从最简单的例子入手

从最简单的例子入手分析 PixiJS 源码 我一般是以使用角度作为切入点查看分析源码,例子中用到什么类,什么方法,再入源码。 高屋建瓴的角度咱也做不到啊,毕竟水平有限 pixijs 的源码之前折腾了半天都运行不起来,文档也没有明确说明如何调式 我在 github 上看到过也有歪果仁在问如何本地调式最

二分查找 | C++

以此题为例:P2249 【深基13.例1】查找 二分查找 对于一个单调不降的序列 \(S\),传统查找的复杂度是 \(O(|S|)\),即 \(O(n)\). 有时候序列 \(S\) 中的元素特别多,或者你希望尽量减小复杂度,那么,有没有复杂度更低的方法呢? 理论上是不行的,因为读入的复杂度已经达到

详解二分查找

二分法详解 大家好,我是Weekoder! 这是我的第一篇文章,如果有做的不好的地方,请见谅,我会尽力改正。 本文中的图片截取于网络视频,非恶意搬运。 二分法,是一个高效的算法,查找一个数的时间复杂度只需要\(O(\log n)\),大大优化了朴素算法(从头到尾地遍历)\(O(n)\)的线性复杂度。

前端开发中的二分查找算法

在前端开发中,处理和搜索大量数据时,效率是一个关键因素。二分查找算法是一种高效的查找算法,适用于在有序数组中快速找到目标值。本文将详细介绍二分查找算法的基本原理、实现方法及其在前端开发中的应用。 什么是二分查找? 二分查找(Binary Search)是一种在有序数组中查找目标值的算法。它通过不断将

LeetCode 周赛 338,贪心 / 埃氏筛 / 欧氏线性筛 / 前缀和 / 二分查找 / 拓扑排序

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末是 LeetCode 第 338 场周赛,你参加了吗?这场周赛覆盖的知识点很多,第四题称得上是近期几场周赛的天花板。 小彭的技术交流群 02 群来了,公众号回复 “加群” 加入我们~

文心一言 VS 讯飞星火 VS chatgpt (102)-- 算法导论9.3 8题

八、用go语言,设 X[1..n]和 Y[1..n]为两个数组,每个都包含n个有序的元素。请设计一个 O(lgn)时间的算法来找出数组 X和Y中所有 2n 个元素的中位数。 文心一言: 要在 O(lgn) 时间内找出两个有序数组 X 和 Y 中所有元素的中位数,可以使用二分查找算法。以下是用 Go

算法学习笔记(3): 倍增与ST算法

倍增 目录倍增查找 洛谷P2249重点变式练习快速幂ST表扩展 - 运算扩展 - 区间变式答案倍增更多的用法优化矩形查询优化建图优化 DP作者有话说 倍增,字面意思即”成倍增长“ 他与二分十分类似,都是基于”2“的划分思想 那么具体是怎么样,我们以一个例子来看 查找 洛谷P2249 依据题面,我们知

二叉树中查找后继节点问题

二叉树中查找后继节点问题 作者:Grey 原文地址: 博客园:二叉树中查找后继节点问题 CSDN:二叉树中查找后继节点问题 题目描述 给定一个二叉查找树,以及一个节点,求该节点在中序遍历的后继,如果没有则返回 null 题目链接见:LintCode 448 · Inorder Successor i

二分图(例题)

https://www.cnblogs.com/kuangbiaopilihu/p/18184536 $\quad $ 这里不再介绍二分图的基础知识,只是一些例题的解释。 $\quad $ 当然,这道题可以用二分+并查集来解决。但这是二分图专辑,所以介绍一下二分图做法。 $\quad $ 首先如果两