binary search 二分法检索

二分查找算法解析
本文深入探讨了二分查找算法的实现与应用。通过简洁的Swift代码示例,讲解了如何在一个有序数组中高效地搜索目标值。算法采用递归方式,每次将搜索范围减半,直至找到目标值或确定其不存在,实现O(logn)的时间复杂度。

本篇介绍一个比较简单的搜索算法, binary search,二分法检索, 下面是代码

func binarySearch(array: [Int], numberToSearch: Int) -> Bool {
    let minIndex = 0
    let maxIndex = array.count - 1
    let midIndex = maxIndex / 2
    let midValue = array[maxIndex]
    
    if numberToSearch < array[minIndex] || numberToSearch > array[maxIndex] {
        return false
    }
    if array.count == 0 { return false }
    
    if numberToSearch > midValue {
        let slice = Array(array[midIndex + 1...maxIndex])
        return binarySearch(array: slice, numberToSearch: numberToSearch)
    }
    
    if numberToSearch < midValue {
        let slice = Array(array[minIndex...midIndex - 1])
        return binarySearch(array: slice, numberToSearch: numberToSearch)
    }
    
    if midValue == numberToSearch {
        return true
    }
    
    return false
}

这个算法的是在一个排序的array中,是否有我们想要的那个数,它的逻辑在于首先我们从中间开始找,如果中间那个数不是我们想要的那个数,便判断是否大于或者小于这个数,如果是大于,便去掉小于的那一半,然后在进入算法,自此类推,直到找到我们想要的那个数,否则return false。这算是一个很快的算法,如果运气好,直接中间那个数就是我们要的数的话,它的time complexity就是 O(1), 如果运气差,直到分到最后才找到想要的数,它的time complexity就是 O(log n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值