二分查找是面试中经常考到的题目,所以一定要掌握二分查找的思想。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
下面通过我写的一个简单的程序来说明:
#include<stdio.h>
bool Bin_Find(int *,int ,int );
int main()
{
int Flag = 0;
int num = 0;
int a[] = {1,2,3,4,5,6,7,8,9};
printf("请输入要查找的数");
scanf("%d",&num);
int length = sizeof(a)/sizeof(int);
Flag = Bin_Find(a,num ,length);
if(Flag)
printf("已经找到\n");
else
printf("没有找到\n");
return 0;
}
bool Bin_Find(int *a,int x ,int high)
{
int low = 0;
int mid = (high + low)/2;
while(high >= low)
{
if(a[mid] == x)
return true;
else if(a[mid] > x)
{
high = mid - 1;
mid = (high + low)/2;
}
else
{
low = mid + 1;
mid = (high + low)/2;
}
}
return false;
}
程序执行的结果是: