题目
编写程序用减治法实现折半查找,要求输入数字,输出其位置。(给出运算结果截图)
输入格式
第一行包含整数 n 和 x,表示数组长度和要查询的数。
第二行包含 n 个整数(均在 1∼10000范围内),表示完整数组(该数组为有序递增数组)。
输出格式
输出x的具体位置。
输入样例
8 5
1 2 3 4 5 6 7 8
输出样例
4
题目保证一定有解。
思路
折半查找即二分查找,我们二分查找小于等于x的最大边界。
代码
#include<stdio.h>
const int N = 10010;
int a[N];
int main()
{
int n,x;
scanf("%d%d",&n,&x);
for(int i = 0; i < n; i++)
{
scanf("%d",&a[i]);
}
int l = 0 , r = n - 1;
while(l < r)
{
int mid = (l + r + 1)/2;
if(a[mid] <= x) l = mid;
else r = mid - 1;
}
printf("%d\n",l);
return 0;
}
运行截图