427 字
2 分钟
算法-二分查找

算法-二分查找#

二分查找(binary search)是一种基于分治策略的高效搜索算法。它利用数据的有序性,每轮缩小一半搜索范围,直至找到目标元素或搜索区间为空为止。

二分查找实现#

// BinarySearch
//
// @Description: 二分查找
// @param nums 有序数组
// @param target 目标值
// @return int 目标值索引,若不存在返回-1
func BinarySearch(nums []int, target int) int {
if len(nums) == 0 {
return -1
}
// 初始化左右指针
left := 0
right := len(nums) - 1
// 当右指针小于左指针时,循环结束
for left <= right {
// 计算中间元素的索引
mid := (right-left)/2 + left
if nums[mid] == target {
return mid
}
// 当中间元素小于目标值时,移动左指针,反之移动右指针
if nums[mid] < target {
left = mid + 1
} else {
right = mid - 1
}
}
return -1
}

二分查找插入点实现#

// BinarySearchInsertion
//
// @Description: 二分查找插入位置
// @param nums 有序数组
// @param target 目标值
// @return int 插入位置下标
func BinarySearchInsertion(nums []int, target int) int {
if len(nums) == 0 {
return 0
}
// 初始化左右指针
left := 0
right := len(nums) - 1
// 当右指针小于左指针时,循环结束
// 此时左指针指向的元素为第一个大于目标值的元素,即插入位置
for left <= right {
// 计算中间元素的索引
mid := (right-left)/2 + left
// 当中间元素等于目标值时, 考虑到重复元素,我们规定将重复元素插入到其最左侧
if nums[mid] == target {
right = mid - 1
} else if nums[mid] < target {
left = mid + 1
} else {
right = mid - 1
}
}
return left
}