失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C语言之折半查找(二分查找)

C语言之折半查找(二分查找)

时间:2020-10-08 03:40:17

相关推荐

C语言之折半查找(二分查找)

一、什么是折半查找?

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

算法复杂度编辑

二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.

时间复杂度无非就是while循环的次数!

总共有n个元素,

渐渐跟下去就是n,n/2,n/4,....n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数

由于你n/2^k取整后>=1

即令n/2^k=1

可得k=log2n,(是以2为底,n的对数)

所以时间复杂度可以表示O()=O(logn)

二、折半查找原理

查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。

三、C语言程序代码

#include<stdio.h>

intbinserch(intx,intm[],intn);

intmain()

{

inta,jieguo;

intm[10]={1,2,3,4,5,6,7,8,9,10};

printf("请输入要找的数:");

scanf("%d",&a);

jieguo=binserch(a,m,10);

if(jieguo==-1)

printf("没找到!\n");

else

printf("在m[%d]位置找到%d\n",jieguo,a);

return0;

}

intbinserch(intx,intm[],intn)//x是要找的数,n为数据的长

{

intlow,high,mid;

low=0;high=n-1;

while(low<=high)

{

mid=(low+high)/2;

if(x<m[mid])

high=mid-1;

elseif(x>m[mid])

low=mid+1;

else

returnmid;

}

return-1;

}

如果觉得《C语言之折半查找(二分查找)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。