二分法是一种非常高效的排序算法,
基本用法
func binarySearch(data []int, target int) int {
left,right := 0 ,len(data)
for left <= right {
mid := left + (right-left)/2
if data[mid] == target{
return mid
} else if data[mid] < target{
left = mid+1
}else{
right = mid-1
}
}
return -1;
}
二分查找的下界
func binarySearchV1(data []int, target int) int {
left,right := 0 ,len(data)
for left <= right {
mid := left + (right-left)/2
if data[mid]>target {
right = mid-1
}else if data[mid]<target {
left = mid+1
}else{
if mid ==0 || data[mid-1]!=target{
return mid
}else{
right = mid-1
}
}
}
return -1
}
二分查找的上界
func binarySearchV2(data []int, target int) int {
left,right := 0 ,len(data)
length := right
for left <= right {
mid := left + (right-left)/2
if data[mid]>target {
right = mid-1
}else if data[mid]<target {
left = mid+1
}else{
if mid ==length-1 || data[mid+1]!=target{
return mid
}else{
left = mid+1
}
}
}
return -1
}
参考
二分查找详解及其变种实现&LeetCode题解 - 力扣(LeetCode) (leetcode-cn.com)