704 二分查找 golang实现

二分查找(Binary Search) 是一种高效的查找算法,适用于 有序数组 或 有序列表。它的基本思想是通过将搜索范围逐渐缩小到目标元素所在的一半,从而大大减少查找的次数。

二分查找的基本原理
排序:二分查找只能在有序数据中使用,数据必须是递增或递减顺序排列的。跳出循环的条件:左边值>右边值,其余都应进入循环,所以for left<=right
选择中间元素:每次查找时,选取当前范围的中间元素。
比较大小:将目标值与中间元素进行比较

  • 如果目标值小于中间元素,则继续在左半部分查找;

  • 如果目标值大于中间元素,则继续在右半部分查找;

  • 如果目标值等于中间元素,查找成功,返回该元素的索引。

  • 重复过程:每次查找时,范围缩小一半,直到找到目标值或者搜索范围为空。

二分查找的时间复杂度
由于每次查找将范围缩小一半,二分查找的时间复杂度为 O(log n),其中 n 是待查找的元素个数。相比于线性查找的 O(n),二分查找在处理大规模数据时更加高效。

点击查看代码
func search(nums []int, target int) int {
    left,right:=0,len(nums)-1
    for left<=right {
        mid:=left+(right-left)/2
        if  target<nums[mid]{
            right=mid-1
        }else if target >nums[mid]{
            left = mid+1
        }
        if target ==nums[mid]{
            return mid
        }
    }
    return -1
}
posted @ 2024-09-12 16:03  wochh  阅读(27)  评论(0编辑  收藏  举报