二分法查找:二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
利用递归实现拆办查找:
#include <stdio.h>
void find(int low,int high,int elem,int a[])
{
if(low>high)
{
printf("该数据不在数组中!\n");
return;
}
int mid=(low+high)/2;
if(elem>a[mid])
{
low=mid+1;
find(low,high,elem,a);
}else if(elem<a[mid])
{
high=mid-1;
find(low,high,elem,a);
}else
{
printf("在数组中是第 %d 个元素\n",mid+1);
return;
}
}
int main()
{
int a[10]={1,2,0};
int i;
for(i=2;i<10;i++)
{
a[i]=a[i-1]+a[i-2];
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
int d;
scanf("%d",&d);
find(0,9,d,a);
return 0;
}