参考链接: https://www.cnblogs.com/luoxn28/p/5767571.html
查找第一个相等元素: key <= 中间 往左走 返回 left
查找最后一个相等元素: key<中间 往左走 返回 right
查找最后一个≤关键字的元素: key<中间 往左走 返回 right
查找最后一个<关键字的元素: key<=中间 往左走 返回 right
查找第一个≥关键字的元素: key<=中间 往左走 返回 left
查找第一个>关键字的元素: key<中间 往左走 返回left
printf("请输入要查找的元素: ");
scanf("%d", &d);
low = 0;
count = 0;
up = len - 1;
while (low <= up) {
count++;
mid = (low + up) / 2;
if (d < a[mid]) { // key < 中间往左走 (即key == a[mid]往右走)
up = mid - 1;
} else {
low = mid + 1;
}
}
if (a[up] == d) {
printf("第%d个元素为%d, 比较次数为%d\n", up, a[up], count); // 返回right
} else {
printf("查找失败 比较次数为%d\n", count);
}
下面用图说明. 待查找关键字是2.