C 语言二分查找算法

2024年8月28日 | 阅读 4 分钟

二分查找是一种在排序数组中查找特定元素的快速方法。此算法的初始任务是将目标值与数组的中间元素进行比较。如果目标值包含在中间元素中,则搜索被认为成功。如果目标值小于中心元素,算法将在数组的左半部分进行搜索。如果目标值大于中心元素,程序将扫描数组的右半部分。这个方法会一直重复,直到找到目标值或搜索范围耗尽。

用途

数据库、搜索引擎和数据处理只是使用二分查找策略的一些应用。

特性

  • 输入值的数组必须已排序。
  • 通过每次迭代,该方法将搜索范围缩小一半,使其对大型数据集特别有效。
  • 该算法的最坏情况时间复杂度为 O (log n)。
  • 程序通过分而治之的策略来查找所需值。

这是用 C 语言编写的二分查找算法的一个简单示例

输出

Target found at index 2
  • binary_search 函数接受四个参数:要搜索的数组、搜索范围的左边界和右边界,以及要查找的目标值。如果找到所需值,该函数将返回其索引;否则,它返回 -1。
  • main 函数创建一个名为 arr 的数组和一个名为 target 的值。然后使用 binary_search 函数搜索数组中的目标值。如果找到了目标值,函数将返回其所在的索引。否则,将显示消息“未找到目标”。
  • 二分查找算法的实现很简单。我们首先将左边界设置为数组的初始索引,将右边界设置为数组的最后一个索引。只要左边界小于或等于右边界,数组就会再循环一次。我们在循环内使用公式 (left + right) / 2 来计算搜索范围的中间索引。此公式计算中间索引的向下取整的整数值。
  • 将数组的中心元素与目标值进行比较。如果它们相等,则返回中心元素的索引。如果所需值小于中心元素,我们将右边界更改为比中间索引小一。否则,我们将左边界调整为比中心索引大一。我们一直这样做,直到找到目标值或搜索空间被填满。
  • 二分查找算法的时间复杂度为 O(log n),其中 n 是数组大小。这比线性搜索(时间复杂度为 O(n),其中 n 是数组大小)效率高得多。
  • 最后,二分查找技术提供了一种查找排序数组中特定元素的有效方法。它易于构建,时间复杂度为 O(log n),使其成为大型数据集的高效方法。

优点

  • 对于大型数据集,二分查找算法非常高效,并且能够处理各种输入大小。
  • 该算法几乎可以用所有编程语言轻松实现。

缺点

  • 在使用二分查找技术之前,必须对输入数组进行排序,这会消耗更多的时间和内存。
  • 该算法不能应用于未排序的数组。
  • 如果输入数组未排序,该算法可能会产生不正确的结果。
  • 由于该技术开销可能超过其优势,因此二分查找算法不适用于小型数据集。

结论

使用二分查找技术可以快速搜索排序数组中的特定元素。它采用分而治之的策略,在每次迭代中将搜索范围减半,使其对大型数据集非常有效。但是,在使用二分查找技术之前,必须对输入数组进行排序,这会消耗额外的时间和内存。二分查找算法是一种复杂的数据处理工具,在各行各业中得到广泛应用。