Swift - 二分查找算法
发布时间:2020-12-14 06:07:07 所属栏目:百科 来源:网络整理
导读:醒脑图,给我自己看的 思想 顾名思义,二分查找就是将数组每次劈开一半,分为两个部分,然后判断需要查找的数据在那一部分,再对这部分数据劈开一半,如此重复...。二分查找算法要求待查数组为有序数组。 步骤 假设待查数据源list是一个有序数组1. 确定待查数组或
醒脑图,给我自己看的 思想顾名思义,二分查找就是将数组每次劈开一半,分为两个部分,然后判断需要查找的数据在那一部分,再对这部分数据劈开一半,如此重复...。二分查找算法要求待查数组为有序数组。 步骤假设待查数据源list是一个有序数组 1. 确定待查数组或子数组的开始位置start(每次递归会根据情况变化) 2. 确定待查数组或子数组的结束位置end(每次递归会根据情况变化) 3. 确定待查数组的中值位置middle = (start + end)/2 (每次递归会根据情况变化) 4. 递归上面的操作,结束条件为start和end重合,如果找了整个数组都没有这个结果,返回-1,结束递归 看下面代码中的注释吧,清晰明了 代码import UIKit
var str = "Hello,man"
var list = [Int]()//待查随机模拟数组
var item = 0
//造一个有十个元素的模拟数据数组
for i in 0..<10 {
item = item + Int(arc4random_uniform(UInt32(20)));
list.append(item)
}
//随机一个元素
let targetNum = list[Int(arc4random_uniform(UInt32(10)))]
print("原始数组为: (list) 目标数字为: (targetNum)")
//compareTimes : 记录比较次数
var compareTimes = 0
//result : 记录结果
var result = binarySearch(targetNum,list)
print("搜索结果: (result) 比较次数 : (compareTimes)")
/// 二分查找法
///
/// - Parameters:
/// - targetNum: 目标数字
/// - sourceList: 原始数组
/// - Returns: 目标数值在原始数组中的位置
func binarySearch(_ targetNum:Int,_ sourceList:[Int]) -> Int{
var start = 0
var end = sourceList.count - 1
//只要没有指向同一个数,则继续查找
while start <= end {
compareTimes += 1
//取中值
var middle = (start + end)/2
print("----第(compareTimes)次比较的中值为(sourceList[middle])")
//如果中值等于目标值,直接返回中值index
if targetNum == sourceList[middle] {
return middle
}
//如果目标小于中值.说明在前半段
if targetNum < sourceList[middle] {
end = middle - 1
}
//如果目标大于中值.说明在后半段
if targetNum > sourceList[middle] {
start = middle + 1
}
}
//没有找到
return -1
}
结果特性
其他我搭建的技术blog,详细请前往: www.livefor.cn (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |