谁能用c语言帮我写个二分法的查找程序??

Python014

谁能用c语言帮我写个二分法的查找程序??,第1张

#include<stdlib.h>

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语句去掉

}