其次,传值和传地址一塌糊涂,完全就是乱写么。
scanf的第二个参数是地址,如果本身不是指针则需要取址符。
我给你重写了算了
#include<stdio.h>
int Retrieve(int array[],int length,int x)/*形参x直接传值就可以了*/
int main()
{
int *a,x
int length,i
scanf("%d",&length)
a = (int)malloc(sizeof(int)*length)/*申请一个内存空间用来存放数据,或者直接用一个大数组也可以*/
#include <stdio.h>int search(int a[],int b,int c,int i)
{
int x,y,z
x=i+1
z=b-1
y=(x+z)/2
while(x<=z)
{
if(a[y]>c)
{
z=y-1
y=(x+z)/2
continue
}
if(a[y]<c)
{
x=y+1
y=(x+z)/2
continue
}
return y+1
}
return -1
}
int main()
{
int i,m,pos
scanf("%d",&m)
int a[m]
for(i=0i<mi++)
{
scanf("%d",&a[i])
}
for(i=0i<mi++)
{
pos=search(a,m,a[i],i)
if(pos!=-1)
{
printf("FOUND a[%d]=%d, position is %d\n",i,a[i],i+1)
return 0
}
}
if(pos==-1)
{
printf("NOT FOUND\n")
}
return 0
}
这种查找方法的数组必须是从小到大的,用遍历的话就没这个问题了。