一、基本概念
折半查找的算法通常被称为二分查找(Binary Search)。- 二分查找是一种高效的查找算法,
适用于已经排好序的数据集合,通过每次将查找范围减半来快速定位目标元素的位置。
二、基本思想如下:
- 找到数组的中间元素。
- 将中间元素与目标元素进行比较。
- 如果中间元素等于目标元素,则查找成功,返回中间元素的位置。
- 如果中间元素大于目标元素,说明目标元素可能在左半部分,将查找范围缩小到左半部分。
- 如果中间元素小于目标元素,说明目标元素可能在右半部分,将查找范围缩小到右半部分。
- 重复上述步骤,直到找到目标元素或者查找范围为空。
二分查找的时间复杂度为 O(log2n),其中 n 是数据集合的大小。这使得它在大规模数据中定位元素非常高效。
以下是一个简单的用 Swift 实现的二分查找算法:
/// Mark - 折半查找二分查找
///array 查找的数组
///target 目标元素
///-> Int? 返回目标元素的索引
func binarySearch(_ array: [Int], target: Int) -> Int? {
var left = 0//起始位置
var right = array.count - 1//数组的总个数
while left <= right {
let mid = left + (right - left) / 2
let obj = array[mid] //根据索引取出元素
if obj == target {
return mid
} else if obj < target {
left = mid + 1
} else {
right = mid - 1
}
}
return nil // 目标元素不在数组中
}
let sortedArray = [1, 3, 5, 7, 9, 11, 13, 15, 17]
if let index = binarySearch(sortedArray, target: 9) {
print("目标元素在索引 \(index) 处。")
} else {
print("目标元素不在数组中。")
}
在这段代码中,binarySearch 函数接受一个已排序的整数数组和目标元素作为参数。通过不断调整 left 和 right 指针来缩小查找范围,直到找到目标元素或确定不存在。如果找到目标元素,函数返回其索引;如果不存在,返回 nil。