在C语言的实际应用中,查找是常用的基本运算,而查找算法主要有顺序查找、二分查找、分块查找以及哈希表查找四种。在本次的讲解中课课家笔者主要给大家讲解二分查找的基本概念以及它在实际程序编写中所发挥的作用。
所谓二分査找(Binary-Search),它也被称为折半査找,其优点是查找速度快,缺点是要求所要査找的数据必须是有序序列。二分查找这种算法的基本思想是将所要査找的序列的中间位置的数据与所要査找的元素进行比较,如果相等,则表示査找成功,否则将以该位置为基准将所要査找的序列分为左右两部分。接下来笔者根据所要査找序列的升降序规律及中间元素与所查找元素的大小关系,来选择所要査找元素可能存在的那部分序列,对其采用同样的方法进行査找,直至能够确定所要查找的元素是否存在,具体的编写方法大家可以通过观察下面的代码例子来进行了解。
#include
binarySearch(inta[],intn,intkey){
intlow=0;
inthigh=n-1;
while(low<=high){
intmid=(low+high)/2;
intmidVal=a[mid];
if(midVal
low=mid+1;
elseif(midVal>key)
high=mid-1;
else
returnmid;
}
return-1;
}
intmain(){
inti,val,ret;
inta[8]={-32,12,16,24,36,45,59,98};
for(i=0;i<8;i++)
printf("%d\\t",a[i]);
printf("\\n请输人所要查找的元素:");
scanf("%d",&val);
ret=binarySearch(a,8,val);
if(-1==ret)
printf("查找失败\\n");
else
printf("查找成功\\n");
return0;
}
输出结果:
-3212162436455998
请输入所要查找的元素:12
查找成功
在上面的代码中,我们通过二分査找算法实现了查找功能,其实现过程具体如下图所示:
①在上图所示的查找过程中,我们首先将序列中间位置的元素与所要査找的元素进行比较,发现要査找的元素位于该位置的左部分序列中。
②接下来我们将mid的左边一个元素作为high,继续进行二分査找,这时mid所对应的中间元素刚好是所要査找的元素,査找结束,返回査找元素所对应的下标。
③最后我们在main函数中通过返回值来判断査找是否成功,如果査找成功.就打印输出“査找成功”的信息,否则输出“査找失畋”的信息。
本次浅析二分查找算法的讲解到此就暂告一段落,如果以后有什么相关内容进行补充或者修改的话,笔者会继续在此进行相关内容的补充或者修改的工作,同时也欢迎大家对本次的讲解提出自己的建议和补充。最后笔者希望本次讲解对大家学习C语言能够起到一定的帮助作用!