折半查找(C语言)
程序员文章站
2024-03-20 18:50:40
...
折半查找:
- 设定查找范围的下限low,上限high,
由此确定查找范围的中间位置mid; - 中间位置的值等于待查的值,查找成功
中间位置的值小于待查的值,low=mid+1
中间位置的值大于待查的值,high=mid-1 - 直到low>high,查找失败。
#include<stdio.h>
#define NUM 10
int a[]={6,12,28,37,54,65,69,83,90,92};
int BinarySearch(int s[],int n,int key)
{
int low,high,mid;
low=0;
high=n-1;
while(low<=high)
{
mid=(low+high)/2; //计算中间元素序号
if(s[mid]==key) //中间元素与关键字相等
return mid;
else if(s[mid]>key) //中间元素大于关键字
high=mid-1;
else
low=mid+1;
}
return -1; //查找失败返回-1
}
int main()
{
int key,pos;
printf("原数据为:");
for(int i=0;i<NUM;i++)
printf("%d ",a[i]);
printf("\n");
printf("请输入关键字:");
scanf("%d",&key);
pos=BinarySearch(a,NUM,key);
if(pos>=0)
printf("查找成功!在第%d位!",pos+1);
else
printf("查找失败!");
return 0;
}