二分法:
1 对象一定是个有序数列
2 根据排序类型不同,需要修改比较值
从名字就可以知道,就是对半分,不断对半分
假设检索 5 从 123456
第一次:
min = 0 max = 5 mid = 2
3 > 5 ? 小=> min = 3, max = 5, mid = 4
第二次
min = 3, max = 5, mid = 4
5 == 5 输出 4
123456 mid =(max+min)/2 min = 0 max = 5
int search_binary(int array[], int count, int val) {
int max = count-1;
int min = 0;
int mid = 0;
while (min <= max) {
mid = (max+min) / 2;
if (array[mid] == val) {
return mid;
}
if (array[mid] > val) {
min = mid + 1;
} else {
max = mid - 1;
}
}
return -1;
}
推荐课程
尹成老师带你学算法
数据结构核心原理与算法应用