二分查找法。按照从小到大的顺序,输入n个整数并存入数组a中,然后在数组a中查找给定的x。如果数组a中的元素与x的值相同,输出相应的下标(下标从0开始);如果没有找到,输出“Not Found”。如果输入的n个整数没有按照从小到大的顺序排列,或者出现了相同的数,则输出“Invalid Value”。
1 检查数列是否完全递增
2 不断将x与mid比对,调整缩小left与right的范围
3 用变量found确定是否找到
#include<stdio.h>
#define MAXN 10
int main()
{
int found,i,left,mid,n,right,sorted,x;
int a[MAXN];
scanf("%d%d",&n,&x);
for(i=0;i<n;i++)scanf("%d",&a[i]);
sorted=1;
for(i=1;i<n;i++)
{
if(a[i-1]>=a[i])
{
sorted=0;break;
}
}
if(sorted==0) printf("Invalid Value\n");
else
{
found=0;
left=0,right=n-1;
while(left<=right)
{
mid=(left+right)/2;
if(x==a[mid])
{
found=1;break;
}
else if(x<a[mid])
{
right=mid-1;
}
else left=mid+1;
}
}
if(found!=0) printf("%d\n",mid);
else printf("Not Found\n");
return 0;
}