#include<stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b)
{
return (*(int *)a - *(int *)b);
}
main()
{
int a[10]={0};
int b,mid=0,low=0,high=0,i;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
qsort(a,10,sizeof(int),cmp);
/*用qsort()函数把无序的数排列为有序的升序排列的一串数字。
目的是让二分查变得有意义。*/
low=0;
high=9;
mid=(low+high)/2;
scanf("%d",&b);
if(b<a[0]||b>a[10])
{
printf("Error!\n");//先查看范围,若不在范围里,直接排除。
}
else
{
while(low<=high)
{
if(b==a[mid])
{
printf("Good!\n");//如果一次就中,那就直接输出Good!。
break;
}
/*如果一次不中,循环判断以下语句。1.b>中间值,不改变high,通过多次改变low和mid,
再与b进行判断,中了便输出Good!。若直到high值都不等于b,那就输出Error!。*/
else if(b>a[mid])
{
low=mid+1;
mid=(low+high)/2;
if(b>a[high])
{
printf("Error!\n");
break;
}
}
/*2.b<中间值,不改变low,通过多次改变high和mid,
再与b进行判断,中了便输出Good!。若直到low值都不等于b,那就输出Error!。*/
else
{
high=mid-1;
mid=(low+high)/2;
if(b<a[low])
{
printf("Error!\n");
break;
}
}
}
}
}
初次编写,希望获得宝贵意见。
注:初次学习代码,C语言初级。