算法思想 | 分治法 之 二分查找

2021-09-27    981   

背景

分治算法是一种比较常用的算法思想,通过“分而治之”的思想将大问题化解为小问题并逐个击破,最后将结果合并返回即可。

问题

通过二分查找的方式快速找到数组中的一个值

代码

二分查找算是一个比较特殊的分治法,通过选定有序数组的中间值与目标值比较大小,然后选定中间值的左侧或者右侧(目标值所在区域)继续分治,另一半则直接舍弃。

// 二分查找,根据查得的值大小,排除一半的数组值
// 二分查找是通过双指针的形式来分治的
// 二分查找数组必须有序,否则不叫二分查找
func BinarySearch(target int, arr []int) (index int) {
	left := 0
	right := len(arr) - 1

	for left <= right {
		mid := left + (right-left)/2
		midVal := arr[mid]
		if target == midVal {
			index = mid
			return
		}
		if target > midVal {
			left = mid + 1
		} else {
			right = mid - 1
		}
	}
	return -1
}