C语言实现二分查找算法:关键字搜索技巧解析

创始人
2025-01-18 18:07:19
0 次浏览
0 评论

C语言用二分法查找关键字

#include#include#defineSize15intmain(){intbinarySearch(int[],int,int,int);voidprintHeader(void);voidprintRow(int[],int,int,int);inta[大小],i,key,element;for(i=0;i<=Size-1;i++)a[i]=2*i;printf("输入0和28之间的数字:");scanf("%d",&key);printHeader();元素=binarySearch(a,键,0,Size-1);if(元素!=-1)printf("\n%dfoundinarrayelement%d!\n",key,element);elseprintf("\n%disnotfound!\n",key);system("暂停");}voidprintHeader(){inti;printf("\n下标:\n");for(i=0;i<=Size-1;i++)printf("%3d",i);printf("\n");for(i=1;i<=4*Size;i++)printf("-");printf("\n");}intbinarySearch(intarray[],intsearchKey,intlow,inthigh){voidprintRow(intarray[],intlow,intmiddle,inthigh);intmiddle;while(low<=high){middle=(low+high)/2;printRow(array,low,middle,high);if(searchKey==array[middle]])returnmiddle;elseif(searchKey高h)printf("");elseif(i==middle)printf("%3d*",array[i]);elseprintf("%3d",array[i]);printf("\n");效率分析:线性搜索消除了数组排序的限制。
缺点是如果要查找的数字是最后一个,则不适合大数据搜索。
按数组中的数字n进行搜索搜索从0开始,需要进行n次搜索。
如果搜索关键字小于数组的中间元素,则二分查找方法将搜索数组的后半部分。
复杂度:O(log2N)。
如果在给定的子数组中没有找到关键字,它将子数组分成两半并重复此搜索,直到找到的关键字等于中心元素。
未找到子数组或关键字。
在最坏的情况下,使用二进制方法查找具有1024个元素的数组只需要10次比较。
即,将1024除以2,连续除10次,直到得到1。
如果某个元素有1048576(2的20次方),则使用二分法只需比较两个元素。
使用简单的线性搜索需要2的20次方,但您可以在0次尝试中找到您要查找的元素。
对于10亿个数组,我们发现二分法比线性搜索法高效得多。
比如说,如果你比较平均5亿次和30次,那就是天壤之别。
因此,掌握二分法对于处理大型序列库非常有效。

用C语言编写顺序查找和二分查找(折半查找)

顺序查找:在已知的无序队列中查找与给定关键字相同的数字的具体位置。
原理是从第一个开始,将关键字与队列中的数字进行逐一比较,直到找到与给定关键字相同的数字。
复杂度为o(n)。
二分查找又称为半查找,是一种效率较高的查找方法。
【二分查找要求】:1.必须采用顺序存储结构2.必须按照关键字大小依次排列。
【优缺点】减半搜索方法的优点是比较次数少,搜索速度快,平均性能好;其缺点是要求查表是有序表,插入和删除比较困难。
因此,二分查找法适用于不经常变化但查找频繁的有序列表。
【算法思路】首先将表格中间位置记录的关键词与搜索关键词进行比较。
如果两者相等,则查找成功;否则,使用中间位置记录将表分为两个子表,第一个和最后一个。
如果中间位置记录的key是大于搜索关键词的单词,则进一步搜索上一个子表,否则继续搜索下一个子表。
重复上述过程,直到找到符合条件的记录,则查找成功,或者直到子表不存在,则查找失败。
【算法复杂度】假设数组长度为n,算法复杂度为o(log(n))#include//二分查找:intsearch(inta[],intx,intn)//x为要查找的元素,n为数组长度{intmid=0;intlow=0;inthigh=n;while(low<=high){mid=(low+high)/2;if(a[mid]==x){returnmid;}elseif(x\n",search(a,x,10));elseprintf("该元素不在数组中array\n");if(search1(a,x,10)!=-1)printf("查找到的元素在数组中的位置为%d。
\n",search1(a,x,10));elseprintf("该元素不在数组中\n");return0;}

C语言二分查找区求根

用C语言实现二分查找寻根的程序如下。
首先,我们定义必要的头文件并在主函数中初始化一些变量。
然后,该程序要求用户输入区间的上限和下限。
通过计算区间的函数值来确定区间是否有根。
如果某个区间端点处的函数值具有相同的符号,则表示该区间无根。
如果两者都为0,则root直接输出。
如果他们有不同的数字。
输入二分搜索字符串。
在链条中计算区间的中点并计算中点的函数值。
如果中点处的函数值为0;根源已经找到了。
如果中点处的函数值与区间左端或右端处的函数值具有不同的符号,则区间会更窄。
循环结束条件是找到根或者区间长度小于指定的精度值。
具体代码如下:#include#includevoidmain(){printf("方程为x*x*x-x-1=0");floatm,n,mid;doubleb,c,d;printf("请输入。
间隔:");scanf("%f",&m);scanf("%f",&n);ints=1;b=m*m*m-m-1;c=n*n*n-n-1;if(b*c>0.00)printf("这个方程在这个区间内没有根!");elseif(b*c==0.00){if(b==0.00)printf("这个方程的根是%f\n",m);elseif(c==0.00)printf("这个方程的根是%f\n",n);}elseif(b*c<0 while(s!=0){mid d=mid*mid*mid-mid-1;if(d mid);s=0;}elseif(d*b if(fabs(d-b)<=0.001000){printf( mid);s=0;}else{n mid;}}elseif(d*c<0){if(fabs(d-c)<=0.001000){printf( mid);s=0;}else{m>

c语言如何实现-数组排序,二分查找

给定n个已排序的元素,我们现在需要在这n个元素中找到特定的元素x。
顺序查找法是逐一比较,直到找到元素。
二分查找利用了元素之间的排序关系,可以大大提高效率。
二分法的基本思想是将n个数量大致相同的元素分成两半,然后将a[n/2]与x进行比较。
如果x==a[n/2],则退出。
如果x
如果x>a[n/2],则只需在右半部分查找即可。
本题要求利用上题得到的数组进行顺序查找和二分查找,并对两种查找方式进行计时。
#include#include#include
热门文章
1
高效掌握:CMD命令轻松启动、关闭及登录... 如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...

2
MySQL分区删除技巧与8.0版本新特性... mysql删除分区在MySQL中,删除分区操作主要使用“可替代”的命令与“ dr...

3
Python代码实现:如何判断三角形的三... python三角形三条边长,判断能否构成三角形Python三角形的三个长边如下:...

4
深度解析:MySQL查询语句执行顺序及优... mysql查询语句执行顺序当这是由于执行SQL的过程时,了解其过程很重要。 ...

5
SQL教程:使用SUBSTRING和IN... sql取特定字符的前面几位字符selectsubstr('L-0FCLDRBCT...

6
MySQL日期差异计算方法:轻松获取日期... MySQL计算时间差两日期相减得月份mysql两时间相减得月MySQL计算时间之...

7
MySQL及SQL查询获取前10条数据方... MySql查询前10条数据sql语句是从MySQL获取前1 0个数据的SQL查询...

8
MySQL启动问题排查与解决指南 Mysql为什么启动不了如果要配置MySQL,则遇到无法启动的问题,可能是由于配...

9
DbVisualizer添加MySQL数... 如何在DbVisualizer中添加本地mysql数据库由于DbVisualiz...

10
SQL字段默认值设置全攻略:轻松实现自动... sql如何设置字段默认值设置SQL中某个字段的默认值;需要遵循几个步骤。首先您需...