详解二分查找算法原理与使用方法

二分查找算法,又称折半查找算法,是一种高效的查找算法。它的基本思想是将查找区间从中间进行分割,再根据目标值与中间值的大小关系选择下一次查找的区间,从而逐步缩小查找范围,直到找到目标值或无法分割为止。这种算法的时间复杂度是 $O(\log n)$,非常适合于大型数据集的查找。

作用

二分查找算法适用于有序数组中的查找操作,可以快速定位数组中特定元素的位置,比如查找某个数字,或者某个字符串,也可以查找从数值、字符到文件等各种类型的数据。

使用方法

  1. 首先要保证数组是有序的。
  2. 确定查找区间(一般是整个数组),并计算出区间中间位置 mid。
  3. 比较目标值与中间值的大小关系,如果目标值小于中间值,则在左半部分继续查找,否则在右半部分查找。
  4. 重复步骤 2 和 3,直到查找到目标值为止。

以下是一个 Python 代码示例:

def binary_search(array, target):
    low, high = 0, len(array) - 1
    while low <= high:
        mid = (low + high) // 2
        if array[mid] == target:
            return mid
        elif array[mid] < target:
            low = mid + 1
        else:
            high = mid - 1
    return -1

下面是一个简单的示例,演示如何用 Python 实现二分查找。

# 在有序数组中查找特定元素的位置

array = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

def binary_search(array, target):
    low, high = 0, len(array) - 1
    while low <= high:
        mid = (low + high) // 2
        if array[mid] == target:
            return mid
        elif array[mid] < target:
            low = mid + 1
        else:
            high = mid - 1
    return -1

# 查找数字 9 和 20

print(binary_search(array, 9))  # 4
print(binary_search(array, 20)) # -1

这个例子中,我们定义一个有序数组,然后使用二分查找算法查找数字 9 和 20 的位置。由于数组中包含数字 9,因此它的位置是 4,而数字 20 不在数组中,因此返回 -1。

另一个示例展示了如何找到一个字符串在一个已排序的字符串列表中的索引。

# 在有序字符串列表中查找目标字符串的位置

words = ["apple", "cabbage", "mango", "orange", "pear", "peach", "pineapple"]

def binary_search(words, target):
    low, high = 0, len(words) - 1
    while low <= high:
        mid = (low + high) // 2
        if words[mid] == target:
            return mid
        elif words[mid] < target:
            low = mid + 1
        else:
            high = mid - 1
    return -1

# 查找单词 "mango" 和 "banana"

print(binary_search(words, "mango"))    # 2
print(binary_search(words, "banana"))   # -1

在这个例子中,我们定义了一个字符串列表,并使用二分查找算法查找字符串 "mango" 和 "banana" 的位置。由于列表中包含字符串 "mango",因此它的索引为 2,而字符串 "banana" 不在列表中,因此返回 -1。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解二分查找算法原理与使用方法 - Python技术站

(0)
上一篇 2023年3月27日
下一篇 2023年3月27日

相关文章

  • Python实现曲线点抽稀算法的示例

    Python实现曲线点抽稀算法的示例攻略 曲线点抽稀算法是一种常用的数据处理算法,它可以将线上的点进行抽稀,从而减少数据量,提高数据处理效率。在本攻略中,我们将介绍如何使用Python实现曲线点抽稀算法提供两个示例来说明如何使用曲线点抽稀算法进行数据处理。 步骤1:了解曲线点抽稀算法 在曲线点抽稀算法中,我们需要考虑以下因素: 曲线:曲线是指需要进行抽的曲线…

    python 2023年5月14日
    00
  • Python编程快速上手——强口令检测算法案例分析

    下面是详细讲解“Python编程快速上手——强口令检测算法案例分析”的完整攻略,包括算法原理、Python实现和两个示例说明。 算法原理 强口令检测法是一种基于规则的算法,其主要思想是通过一系列规则来判断口令是否强壮。强口令通常包括大小写字母、数字和特殊字符,长度较长,且不易被猜测。强口令检测算法的实现过程如下: 判断口令长度是否符合要求。 判断口令是否包含…

    python 2023年5月14日
    00
  • 关于Python的GPU编程实例近邻表计算的讲解

    以下是关于“关于Python的GPU编程实例近邻表计算的讲解”的完整攻略: 简介 近邻表计算是一个常见的问题,通常涉及到计算一组数据点之间的距离,并找到最近的邻居。在这个问题中,我们需要计算每个数据点与其他数据点之间的距离,并找到最近的邻居。本教程将介绍如何使用Python的GPU编程实现近邻表计算。 步骤 1. 导入库 首先,我们需要导入必要的库,包括Nu…

    python 2023年5月14日
    00
  • 基于python的Paxos算法实现

    基于Python的Paxos算法实现 Paxos算法是一种分布式一致性算法,它可以保证在分布式系统中的多个节点之间达成一致的决策。本文将介绍如何使用Python实现Paxos算法,并提供两个示例说明。 算法原理 Paxos算法的核心思想是通过多个节点之间的协商和投票来达成一致的决策。在Pax算法中,有三种角色:提议者、接受者和学习者。提议者提出一个提议,接受…

    python 2023年5月14日
    00
  • EM算法的python实现的方法步骤

    以下是关于“EM算法的Python实现的方法步骤”的完整攻略: 简介 EM算法是一种常用的统计学习算法,用于估计含有隐变量的概率模型参数。在本教程中,我们将介绍如何使用Python实现EM算法,并提供两个示例。 方法步骤 EM算法的Python实现方法步骤如下: 初始化模型参数,包括隐变量的初始值和模型参数的初始值。 E步骤:根据当前模型参数和观测数据,计算…

    python 2023年5月14日
    00
  • Python常见数字运算操作实例小结

    下面是详细讲解“Python常见数字运算操作实例小结”的完整攻略。 Python常见数字运算操作 Python是一种强大的编程语言,提供了丰富的数字运算操作。下面介绍Python常见的数字运算操作。 加法、减法、乘法和除法 加法、减法、乘法和除法是Python中最基本的数字运算操作,可以使用加号、减号、乘号和除号来实现。 下面是一个Python实现加法、减法…

    python 2023年5月14日
    00
  • Python编程二分法实现冒泡算法+快速排序代码示例

    Python编程二分法实现冒泡算法+快速排序代码示例 本文将详细介绍如何使用Python编程实现二分法、冒泡算法和速排序算法,并提供两个示例说明。 二分法 二分法是一种常用的查找算法,它的基本想是将有序数组分成两部分,然后判断目标值在哪一部分中,从而缩小查找范围。下面是使用Python实现二分法的代码示例: def binary_search(arr, ta…

    python 2023年5月14日
    00
  • PAT甲级真题1020.树的遍历

    翻译和代码思路:Acwing 一个二叉树,树中每个节点的权值互不相同。 现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。 输入格式 第一行包含整数 N,表示二叉树的节点数。 第二行包含 N个整数,表示二叉树的后序遍历。 第三行包含 N 个整数,表示二叉树的中序遍历。 输出格式 输出一行 N个整数,表示二叉树的层序遍历。 数据范围 1<=N<…

    算法与数据结构 2023年4月17日
    00
合作推广
合作推广
分享本页
返回顶部