void
sort(int
a[],int
n){
/*排序函数,要使用二分法查找就必须对数组进行排序*/
int
i,k
for(i=0i<ni++){
int
min=i
for(k=i+1k<nk++)
if(a[min]>a[k])min=k
if(i!=min){
a[min]+=a[i]/*这里是运用加减法交换两个数*/
a[i]=a[min]-a[i]
a[min]-=a[i]
}
}
}
int
find(int
a[],int
n,int
key){/*二分法查找;参数:数组名,数组长度,查找关键字*/
int
min=0,max=n-1/*二分法查找头尾变量*/
while(min<max){/*如果最头的变量值大于最尾变量的值,则查找不到,查找失败*/
int
cen
=
(min+max)/2
if(a[cen]==key)
return
cen/*如果查到,则返回关键字在排序数组的下标*/
if(cen==min
||
cen==max)break/*如果中间变量等于头尾任一个变量,同样查找失败*/
if(a[cen]>key)
max=cen
else
min=cen
}
return
-1
}
void
main(){/*主程序只是为了证明两个函数的可行性,可以自己编写*/
int
a[]={14,10,25,36,87,95,10,12,13,8},i
sort(a,10)
i=find(a,10,11)
if(i!=-1)
printf("be
found")
else
printf("no
found")
getch()
}
#include <stdio.h>//不用math头文件void main()
{int high = 9,low = 0,m,k,a[10]={1,2,3,4,5,6,7,8,9,10}//hing和low赋初值
scanf("%d",&k)
while (high>=low)//>=
{
m=(high+low)/2
if(k<a[m]) high=m-1//比较的是数值而不是下标
else if(k>a[m]) low=m+1
else
{
printf("yes")
return//这两句地方放错了
}
}
printf("no")
return//if语句去掉
}