1. 问题
在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0
2. 解析
对分查找,从中间元素开始与key比较,若key<中间元素,则在数组的左半边继续取中间元素查找;若key>中间元素,则在数组的右半边取中间元素继续查找;直到全部查找完毕或找到key为止
3. 设计
while (low <= high) {
mid = (low + high) / 2;
if (key < 中间元素)
high = mid - 1;
else if (key > 中间元素)
low = mid + 1;
else {
返回key所在的下标;
flag = 1;
break;
}
}
if (flag == 0)
返回j=0;
4. 分析
时间复杂度为O(logn)
5. 源码
https://github.com/tangsongbbb/AlgorithmsLearning/blob/master/作业三/3.2.c