二分查找法又称折半查找,是一种在有序数组中查找特定元素的搜索算法。
其优点是查找速度快,缺点是要求待查表为有序表可实用性较弱。
举个例子:在一段有序数组中查找是否含有需要查找的数,如果有请输出该查找的数在数组的位置,输出数组的下标。如果没有请输出“找不到”。
#include<stdio.h>
#include<string.h>
int er(int a[],int k,int sz)
{
int l=0;//左边
int r=sz-1;//右边
while(l<=r)//当右边不大于等于左边的时候退出while循环
{
int m=(r+l)/2;
if(a[m]<k)
{
l=m+1;
}
else if(a[m]>k)
{
r=m-1;
}
else//相等直接退出
{
return m;
}
}
return -1;
}
int main()
{
int a[]={1,2,3,4,5,6,7,8,9,10};
int k;
scanf("%d",&k);//查找的数字
int sz=sizeof(a)/sizeof(a[0]);//数组的长度
int ret=er(a,k,sz);//er为函数
if(ret==-1)
{
printf("找不到");
}
else
{
printf("%d",ret);//ret为数组的下标
}
return 0;
}
总结:二分法对与初学者来说比较重要,需要掌握。
个人心得:需要提高质量,速度!