查找算法:二分查找(折半查找)
1. 简介
将一个有序数组一分为二,将查找的数据与切分点比较,在哪一块区间。在将所在区间一分为二,将查找的数据与切分点比较,在哪一块区间…
三种情况:
- 查找数据与切分点相等直接返回索引
- 查找数据大于切分点,按切分点右侧继续查找
- 查找数据小于切分点,按切分点左侧继续查找
1.1. 条件
- 必须是有序数组
1.2. 效率
O(lgn)
2. 图示

3. 演示
3.1. Go版本
3.1.1. 文件树形图
binarysearch
├── binary_search.go
├── binary_search_test.go
└── go.mod
3.1.2. 代码
binary_search.go
package binarysearch
func GetIndexByData(arr []int, findData int) int {
low := 0
high := len(arr) - 1
for low <= high {
mid := (low + high) / 2
if arr[mid] > findData {
high = mid - 1
} else if arr[mid] < findData {
low = mid + 1
} else {
return mid
}
}
return -1
}
binary_search_test.go
package binarysearch
import "testing"
func TestGetIndexByData(t *testing.T) {
arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
index := GetIndexByData(arr, 6)
t.Log(index)
}
3.1.3. 测试结果
=== RUN TestGetIndexByData
binary_search_test.go:8: 5
--- PASS: TestGetIndexByData (0.00s)
PASS
4. 参考
- 《C/C++函数与算法速查手册》
版权声明:本文为yimtcode原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。