1.顺序查找
利用循环语句,按顺序依次比较目标量与数组中的元素是否相等,查找时间较长。
2.二分法查找
在区间中每次取一个中间量与指定量比较大小,直到区间的左端与右端相等,此时该下标对应的元素与目标相等则找到了,否则数组中没有这个数。
查找数字25:
左端:0
右端:6
中间:3
a[3]<25
左端:4
右端:6
中间:5
a[5]>25
左端:4
右端:4
中间:4
a[4]=25 查找完毕
#include <stdio.h>
int v[] = {2,4,9,11,25,66,77};
/*在一个有序数组查找具体数字n*/
int binsearch(int x,int y[],int z);
void half_search(int x,int y[],int z);
int main()
{
int N;
int len;
len = sizeof(v)/sizeof(v[0]);
scanf("%d",&N);
binsearch(N,v,len);
half_search(N,v,len);
return 0;
}
int binsearch(int x,int y[],int z)
{
int i;
for(i=0;i<z;i++)
{
while(x == y[i]){
printf("%d为第%d个元素\n",x,i+1);
return i+1;
}
}
printf("未找到\n");
return 0;
}
void half_search(int x,int y[],int z)
{
int len = 7;//计算元素个数
int middle = (len-1)/2;
int left = 0;
int right = len - 1;
int i;
for(i=0;i<3;i++)
{
if(y[middle]==x)
{
printf("%d为第%d个元素\n",x,middle+1);
break;
}
if(y[middle]<x)
{
left = middle+1;
right = right;
}
if(y[middle]>x)
{
left = left;
right = middle-1;
}
middle = (left + right)/2;
if(left == right && y[middle] != x )
{
printf("未找到\n");
break;
}
}
}