二分查找就是折半查找,其基本思想是:首先选取有序表中间位置的记录,将其关键字与给定关键字key进行比较,若相等,则查找成功;若key值比关键字值大,则要找的元素一定在右子表中,继续对右子表进行折半查找;若key值比关键字值小,则要找的元素一定在左子表中,继续对左子表中进行折半查找。如此递推,直到查找成功或失败。
#include<stdio.h>
void binary_search1(int key,int a[],int n)
{
int low,high,mid,count=0,count1=0;
low=0;
high=n-1;
while(low<=high) //当查找范围不为0时执行循环体语句
{
count++; //记录查找次数
mid=(low+high)/2; //求中间位置
if(key<a[mid]) //key小于中间值时确定左子表范围
high=mid-1;
else if(key>a[mid]) //key大于中间值时确定右子表范围
low=mid+1;
else if(key==a[mid]) //查找成功
{
printf("查找成功!\n 查找%d次。a[%d]=%d",count,mid,key);
//输出查找次数及所在位置
count1++; //记录查找成功次数
break;
}
}
if(count1==0) //判断是否查找成功
printf("查找失败!");
}
void main()
{
int i,key,a[100],n;
printf("请输入数组的长度:\n");
scanf("%d",&n);
printf("请按序输入数组元素:\n");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("请输入你想查找的元素:\n");
scanf("%d",&key);
binary_search1(key,a,n);
}