版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/isluckyguo/article/details/83713973
折半查找法的思想是:减少查找序列的长度,分而治之的进行关键字的查找。
方法一:迭代实现
#include <stdio.h>
int bin_search(int str[],int size,int key)
{
int low,mid,high;
low=0;
high=size-1;
while(low<=high)
{
mid=(low+high)/2;
if(str[mid]==key)
return mid;
else if(str[mid]<key)
low=mid+1;
else if(str[mid]>key)
high=mid-1;
}
return -1;
}
int main()
{
int str[11]={1,1,2,3,5,8,13,21,34,55,89};
int n,addr;
printf("请输入要查找的关键字:");
scanf("%d",&n);
addr=bin_search(str,11,n);
if(-1!=addr)
printf("查找成功,要查找的关键%d在%d处\n",n,addr);
else
printf("查找失败");
return 0;
}
方法二:递归实现:
#include <stdio.h>
int search(int str[],int n,int key)
{
int m,low=0,high=n-1;
int mid=(high+low)/2;
if(str[mid]==key)
return mid;
if(str[low]>=str[high])
return -1;
if(str[mid]>key)
{
high=mid-1;
m=search(&str[low],high-low+1,key);
}
else if(str[mid]<key)
{
low=mid+1;
m=search(&str[low],high-low+1,key);
}
if(m!=-1)
m=m+low;
return m;
}
int main()
{
int str[11]={1,1,2,3,5,8,13,21,34,55,89};
int n,addr;
printf("请输入要查找的关键字:");
scanf("%d",&n);
addr=search(str,11,n);
if(addr!=-1)
printf("查找成功,要查找的关键%d处于位置%d\n",n,addr);
else
printf("查找失败\n");
return 0;
}