//有15个数按从小到大的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中的第几个元素的值。
//如果该数不在数组中,则输出“无此数”。
#include<stdio.h>
int main()
{
int array[] = { 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 };
int left, right, mid;
int key;
//区间采用左闭右开
left = 0;
right = sizeof(array) / sizeof(array[0]);
printf("请输入待查找的数据:");
scanf_s("%d", &key);
while (left < right)
{
//找中间位置
//mid = (left + right) / 2;//该种方式可能会导致溢出
mid = left + ((right - left) >> 1);
//与中间位置的数据进行比较
//1.相等—>找到了;2.大于中间位置的数据;3.小于中间位置的数据
if (key == array[mid]) {
printf("找到该元素,在数组中的下标为:%d", mid);
break;
}
else if (key < array[mid]) {
left = mid + 1;
}
else {
right = mid;
}
}
if (left == right) {
printf("无此数");
}
return 0;
}
04-27
609
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
12-25
2223
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
06-22