折半查找也称为二分查找,该方法是将给定值与中间位置记录的关键码比较。若相等,则查找成功;若不相等,则缩小范围,直至新的查找区间中间位置记录的关键字码等于给定值或者查找区间没有元素时(表明查找不成功)为止。
#include<stdio.h>
int binarySearch(int a[],int n,int index)
{
int low=0; //刚开始准备查找的时候,low为最左边的元素
int high=n-1; //high为最右边的元素 (low和high用于锁定区间)
int mid;
int located=-1; //located 用于返回查找的位置,若找不到,则为-1
while(low<=high) //循环终止条件
{
mid=(low+high)/2; //mid 每次的新区间的中点的位置
if(a[mid]==index) //每次判断都是用关键字元素index与数组a的中间位置(下标为mid)比较
{ //如果a[mid]==index ,说明查找成功
located=mid;
break;
}
else if(a[mid]>index) //如果a[mid]>index ,说明下一次要查找的区间为 a[low...mid-1]
high=mid-1;
else
low=mid+1; //如果a[mid]<index ,说明下一次要查找的区间为 a[mid+1...high]
}
return located;
}
int main()
{
int a[10]={1,3,6,7,9,13,15,22,25,28};
int n=sizeof(a)/sizeof(a[0]);
int x;
printf("请输入您要查找的元素:\n");
scanf("%d",&x);
int locate=binarySearch(a,n,x);
if(locate!=-1)
printf("在数组a中找到了元素%d,它的下标是:%d\n",x,locate);
else
printf("在数组a中没有找到元素%d。\n",x);
return 0;
}
运行结果如下: