实验二-折半查找算法设计

上传人:lis****210 文档编号:148080564 上传时间:2022-09-04 格式:DOCX 页数:5 大小:12.98KB
返回 下载 相关 举报
实验二-折半查找算法设计_第1页
第1页 / 共5页
实验二-折半查找算法设计_第2页
第2页 / 共5页
实验二-折半查找算法设计_第3页
第3页 / 共5页
点击查看更多>>
资源描述
实验二折半查找算法设计题目:折半查找算法设计问题描述:(1)分析掌握折半查找算法思想,在此基础上,设计出递归算法和循 环结构两种实现方法的折半查找函数。(2) 编写程序实现:在保存于数组的10000个有序数据元素中查找数 据元素x是否存在。数据元素x要包含两种情况:一种是数据元素x 包含在数组中;另一种是数据元素x不包含在数组中(3) 数组中数据元素的有序化既可以初始赋值时实现,也可以设计一 个排序函数实现。(4) 根据两种方法的实际运行时间,进行两种方法时间效率的分析对 比。基本要求:(1)10000个数据可以初始赋值时实现,也可以调用系统的随机函数, 再设计一个排序函数实现。(2) 两种方法时间效率的分析对比可以有两种方法,一种是理论分析 方法,一种是实际记录运行时间。(3) 提交实验报告。测试数据:运行算法时,当输入的数据小于10000,例如输入9999时,显示该 数据在数组中,下标为9998,并且分别显示递归和循环结构下的时 间;当输入的数据大于10000时,例如输入20000时,显示这个这个 数据不再该数组中。算法思想:设有数组a中元素按从小到大的次序排列,a的下界下标为low, 上界下标为high,首先计算出a的中间位置下标mid=(low+high)/2,1. 递归算法思想:比较x和amid,若x=amid,则查找成功;若 xamid,则随后调用算法自身在下标为mid+1, 上界下标为high的区间继续查找。当查找区间小于等于0时,查找 过程结束。2. 循环结构思想:用while(low = high)控制循环,比较x和amid, 若x=amid,则查找成功;若xamid,则随后在下标为mid+1, 上界下标为high的区间继续查找。当查找区间小于等于0时,查找 过程结束。模块划分:1.头文件time.h中包含time()和difftime(end,start)函数,分别实现取 系统当前时间和end减去start的时间差;2. 头文件stdlib.h中包含rand()函数,实现随机数的生成;3. void list(int a)实现对随机数从小到大的排序;4.int Search(int a,int low,int high,int x)用递归算法实现折半查找数据 元素的函数;5.int BSearch(int a, int low, int high, int x)用循环结构实现折半查找 数据元素的函数;6.void main()主函数,测试用递归算法和循环结构实现折半查找数据 元素的函数。数据结构:源程序:#include#includeint Bsearch(int a,int x,int low,int high)(int mid;if(lowhigh) return -1;mid=(low+high)/2;if(x=amid) return mid;else if(xamid)Bsearch(a,x,low,mid-1);elsereturn Bsearch(a,x,mid+1,high);int Csearch(int test,int x,int low,int high)(for(int i=0;itesti) low=i+1;else high=i-1;if(i=high) return -1;void main()(time_t start,end;double dif;int Bsearch(int a,int x,int low,int high);int Csearch(int test,int x,int low,int high);int a10000,x;int low=0,high=10000,mid=0;printf(请输入要查找的元素:n);scanf(ld,&x);printf(x=%ldn,x);for(int i=0;ihigh;i+)ai=i+1;int bn;time(&start);bn=Bsearch(a,x,0,10000);if(bn=-1) printf(x 不在数组 a 中! n); else printf(x 在数组 a 中,下标为%dn,bn);time(&end);dif=difftime(end,start);printf(递归折半方法耗时为:%f秒n,dif);int flag;time(&start);flag二Csearch(a,x,0,10000);if(flag=-1) printf(x 不在数组 a 中! n);else printf(x 在数组 a 中,下标为%ldn,flag);time(&end);dif=difftime(end,start);printf(循环折半算法耗时为:%f秒n,dif);亘测试情况:D:儡用沁ft Visual tudioCommorAFVlSDeBinDeIxjgkk.ex请输入要查扶S元素丁10096中,下标为M99佛归折军方法耗时为:0.000000!;x在数妃a中,下标5勺循蹈斤半算法耗时为;B .000000砂Press any hey to corntinuc D:诞Z用程序Mi crasaft Vi ua I StudioCo mmonMS Dev9S Bi nD ebugkk.exe清输允要查扶辰元素:19091x-10091签崖排时为:0-000000秒其不在救:5中!循尹挤芈算在新旺为:0.000000秒Pi*G3 3 any key to cort inuc测试结果分析:程序运行结果和人工模拟分析过程完全相同。说明程序设计正确。但是因为 测试程序中数组中的元素过少不能体现出两种情况即递归和循环结构两种算法 的时间差别。理论分析知循环结构的效率高于递归结构
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!