二分查找算法

2025年8月14日 | 阅读10分钟

在列表中搜索一个项目有时可能是一个相当大的挑战,你同意吗?这就是搜索功能派上用场的地方。当你找到你要找的东西时,就被认为是搜索。然而,如果你一无所获,那就算作一次尝试。

搜索项目有多种方法,其中线性搜索和二分查找是两种选择。今天,让我们来探讨一下二分查找技术。

顾名思义,二分查找是针对列表的。因此,在使用此方法之前,请确保您的列表已正确排序。

这种二分查找方法遵循“分而治之”的策略。它将列表分成两部分,并将目标项与元素进行比较。如果匹配,恭喜您!您已命中目标。如果不是,则根据比较结果,搜索将继续到右侧。

请记住,二分查找在列表上有效。如果您的列表未排序,则在使用此方法之前,必须先对其进行排序。

注意:二分查找可以应用于已排序的数组元素。如果列表元素未按排序顺序排列,我们必须先对其进行排序。

现在,让我们看一下二分查找的算法。

算法

现在,让我们看一下二分查找算法的工作原理。

那么,让我们深入了解一下这种二分查找技术是如何运作的。它可能不像看起来那么复杂。

设想这样一个场景;您正在处理一个名为“a”的数组。您的目标是在其中查找一个值“val”。数组包含一个起始元素(下界)和一个结束元素(上界)。

首先,将“beg”赋值为下界,“end”赋值为上界,并将“pos”赋值为 1(暂时只是一个标记)。

然后,您进入一个循环,直到“beg”大于“end”,您将不断重复以下步骤:

  1. 通过取“beg”和“end”的平均值来计算中间索引“mid”。
  2. 检查“mid”处的值是否等于“val”。如果是,您就挖到金矿了!将“pos”设置为“mid”并打印其位置。然后,您可以退出循环。
  3. 如果“mid”处的值大于“val”,则表示“val”可能在数组的左半部分。因此,您将“end”更新为“mid-1”。
  4. 如果“mid”处的值小于“val”,则表示“val”可能在右半部分。将“beg”更新为“mid + 1”。

循环结束后,如果“pos”仍然是 -1,则您要查找的值不在数组中。否则,您已找到其位置。

二分查找的工作原理

现在,让我们看一下二分查找算法的工作原理。

为了理解二分查找算法的工作原理,让我们取一个已排序的数组。通过示例理解二分查找的工作原理会更容易。

有两种方法可以实现二分查找算法:

  • 迭代法
  • 递归法

二分查找的递归方法遵循分而治之的方法。

设数组的元素为:

Binary Search Algorithm

设要搜索的元素为 K = 56

我们必须使用以下公式来计算数组的中值——

所以,在给定的数组中——

beg = 0

end = 8

mid = (0 + 8)/2 = 4。所以,4是数组的中值。

Binary Search Algorithm
Binary Search Algorithm
Binary Search Algorithm

现在,找到了要搜索的元素。因此,算法将返回匹配元素的索引。

二分查找复杂度

现在,让我们看看二分查找在最佳情况、平均情况和最坏情况下的时间复杂度。我们还将查看二分查找的空间复杂度。

1. 时间复杂度

情况时间复杂度
最佳情况O(1)
平均情况O(logn)
最坏情况O(logn)
  • 最佳情况复杂度——在二分查找中,当要搜索的元素在第一次比较中找到时,即当第一个中间元素本身就是要搜索的元素时,就出现了最佳情况。二分查找的最佳情况时间复杂度为O(1)。
  • 平均情况复杂度——二分查找的平均情况时间复杂度为O(logn)。
  • 最坏情况复杂度——在二分查找中,当我们需要不断缩小搜索范围直到只剩一个元素时,就会出现最坏情况。二分查找的最坏情况时间复杂度为O(logn)。

2. 空间复杂度

空间复杂度O(1)
  • 二分查找的空间复杂度为 O(1)。

二分查找的实现

现在,让我们看一下不同编程语言中的二分查找程序。

二分查找的优点

  1. 速度快;与搜索其他搜索方法相比,二分查找速度更快,尤其是在处理大型列表时。查找元素所需的时间是随着列表大小呈对数增长,而不是线性增长。
  2. 效率高。由于二分查找在每一步后都会消除剩余元素的一半,因此它非常高效,不会浪费时间检查不必要的元素。
  3. 易于实现。该算法易于理解,因此可以用各种编程语言轻松编写和实现。
  4. 在已排序的列表中效果很好。只要列表已排序,二分查找就可以快速可靠地找到目标元素。
  5. 空间效率高。与其他搜索算法不同,二分查找不需要额外的 数据结构或内存分配。它直接在给定列表上运行,因此空间效率高。
  6. 用途广泛。二分查找不仅可以用于查找特定元素,还可以用于查找已排序列表中元素的第一次或最后一次出现,甚至用于查找目标值的最接近元素。
  7. 适应性强。二分查找的基本思想可以扩展和适应以解决各种其他问题,例如查找数字的平方根或在旋转排序数组中搜索。
  8. 可靠且可预测。使用二分查找,您可以确切地知道找到目标元素(或确定它不存在)需要多少步,这使其成为一个可靠且可预测的算法。

总而言之,二分查找算法是一种强大的工具,它结合了速度、效率、简单性和多功能性,使其成为各种领域和应用程序中搜索已排序列表的首选。

程序:编写一个用 C 语言实现二分查找的程序。

输出

Binary Search Algorithm

程序:编写一个用 Python 实现二分查找的程序。

输出

Binary Search Algorithm

程序:编写一个用 C++ 实现二分查找的程序。

输出

Binary Search Algorithm

程序:编写一个用 C# 实现二分查找的程序。

输出

Binary Search Algorithm

程序:编写一个用 Java 实现二分查找的程序。

输出

Binary Search Algorithm

程序:编写一个用 PHP 实现二分查找的程序。

输出

Binary Search Algorithm

所以,这就是关于本文的全部内容。希望本文能对您有所帮助并提供信息。


下一主题排序算法