返回

掌握二分查找奥妙,揭秘两种模式,从此不再迷失!

前端

在计算机科学和编程领域,二分查找是一种高效的查找算法,因其时间复杂度为O(log n)而受到广泛应用。然而,许多程序员在使用二分查找时经常会面临一个问题:如何确定判断条件,以及如何避免陷入死循环?为了帮助您快速掌握二分查找算法,避免此类问题,本文将总结二分查找的两种基本模式,助您成为二分查找的熟练使用者。

模式一:查找元素是否存在

第一种二分查找模式用于确定一个元素是否出现在有序数组中。以下步骤演示了该模式:

  1. 定义一个有序数组arr,以及要查找的元素target。
  2. 初始化两个索引变量,low和high,分别指向数组的首尾元素。
  3. 进入循环,该循环将继续执行,直至low大于或等于high。
  4. 计算中间索引变量mid,通常使用公式mid = (low + high) / 2。
  5. 比较arr[mid]和target,若相等,则表明找到了target,返回mid作为索引;若arr[mid]小于target,则说明target在右半部分,更新low为mid + 1;若arr[mid]大于target,则说明target在左半部分,更新high为mid - 1。
  6. 重复步骤3至5,直至找到target或low大于或等于high。
  7. 若循环结束时仍未找到target,则返回-1,表示target不存在于数组中。

使用这种模式,您可以在O(log n)的时间内确定一个元素是否存在于有序数组中。请记住,该模式仅适用于查找元素是否存在,并不适用于寻找其确切位置。

模式二:查找元素的准确位置

第二种二分查找模式用于查找一个元素在有序数组中的确切位置。以下步骤演示了该模式:

  1. 定义一个有序数组arr,以及要查找的元素target。
  2. 初始化两个索引变量,low和high,分别指向数组的首尾元素。
  3. 进入循环,该循环将继续执行,直至low大于或等于high。
  4. 计算中间索引变量mid,通常使用公式mid = (low + high) / 2。
  5. 比较arr[mid]和target,若相等,则表明找到了target,返回mid作为索引;若arr[mid]小于target,则说明target在右半部分,更新low为mid + 1;若arr[mid]大于target,则说明target在左半部分,更新high为mid - 1。
  6. 重复步骤3至5,直至找到target或low大于或等于high。
  7. 若循环结束时仍未找到target,则返回-1,表示target不存在于数组中。

与第一种模式不同,该模式会持续查找target的确切位置,而不是仅判断其是否存在。这种模式同样可以在O(log n)的时间内找到元素的确切位置。

掌握了这两种二分查找模式,您就可以在编程中高效地使用二分查找算法了。通过不断练习和使用,您会发现二分查找并不难,且在许多场景中都非常有用。