本题目要求运用二分查找法在数组R(已升序排序)中查找k值,输出其位置pos(即数组下标,从0开始),如果找不到,则输出-1。
#include<stdio.h>
#define N 10
int BSearch(int [],int,int);
int main(){
int R[N],n;
int pos,k;
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
scanf("%d",&R[i]); //按从小到大的顺序输入n个整数
scanf("%d",&k); //输入待查找的整数k
pos=
BSearch(R,n,k)
;
printf("%d\n",pos);
}
return 0;
}
int BSearch(int R[],int n,int x) // 二分查找函数,返回查找到的位置(数组下标,从0开始),未找到时,返回-1。
{
int pos;
int low=0,high=n-1,mid;
for (
pos=-1;low<=high;
)
{
mid=
(low+high)/2
;
if (
R[mid]==x
)
{
pos = mid ;
break;
}
if (
R[mid]>x
)
high =
mid-1
;
else
low =
mid+1
;
}
return pos;
}