Swift 程序实现二分查找算法

swiftserver side programmingprogramming更新于 2025/9/25 11:22:17

在 Swift 中,二分查找算法用于从已排序的数组中查找元素。它反复将搜索区间分成两半,然后查找指定元素。在二分查找算法中,输入数组必须按排序顺序排列,以降低时间复杂度。

算法

  • 步骤 1 - 创建一个函数来实现二分查找算法。

  • 步骤 2 - 在函数内部,首先找到给定数组的下限和上限范围。

  • 步骤 3 - 运行 while 循环,直到 LBound<=UBound。

  • 步骤 4 - 现在找到给定范围的中间值。并检查中间值是否等于关键元素。如果是,则返回索引值。

  • 步骤 5 - 检查键元素是否小于中间索引,然后搜索上半部分范围。

  • 步骤 6 - 如果键元素大于中间索引,则搜索下半部分范围。

  • 步骤 7 - 如果在给定数组中未找到键元素,则返回 nil。

  • 步骤 8 - 在函数外部创建一个数组。

  • 步骤 9 - 调用函数并将数组和键元素传递给函数。

  • 步骤 10 - 打印搜索到的元素的索引。

示例

在下面的示例中,我们将创建一个名为 binarySearchAlgo() 的函数。此函数以一个已排序的数组作为输入,并查找给定数组是否包含指定的数组。因此,此函数有两个名为 LBound 和 UBound 的变量,用于跟踪搜索的数组范围。然后,我们运行一个 while 循环,直到 LBound<=UBound。在循环内部,我们找到给定范围的中间索引,然后检查以下条件:

如果键元素等于中间元素,则返回中间索引。

如果中间元素小于键元素,则搜索上半部分范围。

如果中间元素大于键元素,则搜索下半部分范围。

如果在给定数组中未找到键元素,则返回 nil。

import Foundation
import Glibc

// 使用二分搜索算法搜索数组元素的函数
func binarySearchAlgo(arr: [Int], key: Int) -> Int? {

   var LBound = 0
   var UBound = arr.count - 1
    
   while LBound <= UBound {
      let middle = (LBound + UBound) / 2
      if arr[middle] == key {
        
         // 找到关键元素
         return middle 
      } else if arr[middle] < key {
        
         // 在上半部分搜索
         LBound = middle + 1 
      } else {
        
         // 在下半部分搜索
         UBound = middle - 1 
      }
   }
    
   // 未找到关键元素
   return nil 
}

let arr = [4, 6, 8, 24, 67, 90]
if let indexValue = binarySearchAlgo(arr: arr, key: 24) {
   print("Found at index: \(indexValue)") 
} else {
   print("Not found") 
}

输出

Found at index: 3

结论

以上就是我们实现二分查找算法的方法。由于输入数组是有序的,因此二分查找是最快的搜索算法。在本文中,我们使用迭代方法实现了一个时间复杂度为 O(log n) 的二分查找算法。二分查找算法对于小型和大型数组都非常有效。二分查找算法的主要缺点是它需要一个有序数组。如果数组未排序,则需要对数组进行排序,这会增加额外的 O(nlogn) 时间复杂度。



相关文章



关于我们 | 隐私条款 | 学习路线
返回顶部