二分查找基本原理图:
参考代码:
泛型的定义:
package v2024
type Integer interface {
int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64
}
type Float interface {
float32 | float64
}
type Number interface {
Integer | Float
}
二分搜索函数的基本实现:
package v2024
// SearchBinary 二分查找算法的基本实现
// @param arr 要查找数组,必须是有序的
// @param target 要查找的目标值
// @return int 返回的索引,找到了返回具体的索引,找不到返回-1
func SearchBinary[T Number](arr []T, target T) int {
// 计算开始索引和结束索引
begin := 0
end := len(arr) - 1
// 遍历所有的可能性,在开始索引小于或等于结束索引的时候一直找
for begin <= end {
// 计算中间索引
mid := (begin + end) / 2 // go 语言里面的除法默认就是整除
// 找到了
if arr[mid] == target {
return mid
}
// 中间值比目标值大,去左边找
if arr[mid] > target {
end = mid - 1
} else {
// 中间值比目标值小,去右边找
begin = mid + 1
}
}
// 循环完了都没有找到
return -1
}
基本的测试方法:
package v2024_test
import (
v2024 "github.com/zhangdapeng520/zdpgo_algorithm/v2024"
"testing"
)
func TestSearchBinary_Basic(t *testing.T) {
arr := []int{1, 2, 3, 4, 5, 6}
target := 3
index := v2024.SearchBinary(arr, target)
t.Log(index, index == 2)
}