ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:19.34KB ,
资源ID:25376186      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25376186.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(二分搜索实验报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

二分搜索实验报告.docx

1、二分搜索实验报告竭诚为您提供优质文档/双击可除二分搜索实验报告篇一:算法设计与分析二分查找实验报告课程设计说明书设计题目:二分查找程序的实现专业:班级:设计人:山东科技大学年月日课程设计任务书学院:信息科学与工程学院专业:班级:姓名:一、课程设计题目:二分查找程序的实现二、课程设计主要参考资料(1)计算机算法设计与分析(第三版)王晓东著(2)三、课程设计应解决的主要问题(1)二分查找程序的实现(2)(3)四、课程设计相关附件(如:图纸、软件等):(1)(2)五、任务发出日期:20XX-11-21课程设计完成日期:20XX-11-24指导教师签字:系主任签字:指导教师对课程设计的评语成绩:指导教

2、师签字:年月日二分查找程序的实现一、设计目的算法设计与分析是计算机科学与技术专业的软件方向的必修课。同时,算法设计与分析既有较强的理论性,也有较强的实践性。算法设计与分析的实验过程需要完成课程学习过程各种算法的设计和实现,以达到提高教学效果,增强学生实践动手能力的目标。用分治法,设计解决二分查找程序的实现问题的一个简捷的算法。通过解决二分查找程序的实现问题,初步学习分治策略。二、设计要求给定已按升序排好序的n个元素a0:n-1,现要在这n个元素中找出一特定元素x。实现二分搜索的递归程序并进行跟踪分析其执行过程。用顺序搜索方法时,逐个比较a0:n-1中的元素,直至找出元素x,或搜索遍整个数组后确

3、定x不在其中。这个方法没有很好的利用n个元素已排好序这个条件,因此在最坏情况下,顺序搜索方法需要o(n)次比较。要求二分法的时间复杂度小于o(n)。三、设计说明(一)、需求分析二分搜索方法充分利用了元素间的次序关系,采用分治策略,可在最坏情况下用o(logn)时间完成搜索任务。该算法的流程图如下:(二)、概要设计二分查(:二分搜索实验报告)找的基本思路是将n个元素分成大致相等的两部分,取an/2与x做比较,如果x=an/2,则找到x,算法终止;如果xan/2,则只要在数组a的右半部分继续搜索x。由于二分查找的数组不一定是一个整数数组,所以我采用了c+中的模板函数,将排序函数sort和二分查找函

4、数binarysort写为了模板函数,这样不尽可以查找整数数组,也可以查找小数数组。由于查找的数组的长度不固定,所以我用了c语言中的malloc和realloc函数,首先定义一个数组指针,用malloc函数该它分配空间,然后向数组中存数,当数组空间满时,在用realloc函数为数组再次分配空间。由于在随机输入一组数时不知在什么位置停止,所以篇二:二分搜索实验报告二分搜索一实验目的:1.理解算法设计的基本步骤及各步的主要内容、基本要求;2.加深对分治设计方法基本思想的理解,并利用其解决现实生活中的问题;3.通过本次实验初步掌握将算法转化为计算机上机程序的方法。二实验内容:1.编写实现算法:给定n

5、个元素,在这n个元素中找到值为key的元素。2.将输入的数据存储到指定的文本文件中,而输出数据存放到另一个文本文件中,包括结果和具体的运行时间。3.对实验结果进行分析。三实验操作:1.二分搜索的思想:首先,假设表中的元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复上述过程,知道找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。由于二分搜索是基于有序序列的一种搜索算法,故将输入的一组数据首先进行排序,考虑到输

6、入数据可能有多个,采用快速排或者是合并排序,其中与冒泡做了对比。冒泡排序算法:voidsort(intList,intlength)intchange;for(inti=0;ifor(intj=i+1;jif(ListiListj)change=Listi;Listi=Listj;Listj=change;快速排序算法:voidQsort(intList,intlow,inthigh)if(low=high)return;intfirst=low;intlast=high;intkey=Listfirst;while(firstwhile(firstwhile(firstListfirst=k

7、ey;Qsort(List,low,first-1);Qsort(List,last+1,high);二分查找算法:intbinarysearch(intList,intlow,inthigh,intkey)intmid=(low+high)/2;if(highwhile(lowif(Listmid=key)returnmid+1;elseif(Listmidkey)returnbinarysearch(List,low,mid-1,key);elsereturnbinarysearch(List,mid+1,high,key);2.实验数据的输入:本实验采用将数据输入与输出存储到文件中的方式

8、,需要采用c+文件流操作,对于数据的输入,由于cin对数据的读取会忽略空格和换行操作,使用cin流输入来控制数据的输入。对于输出操作,首先要从文件中读取数据,为了区别各数据,用逗号隔离,经过处理后将数据存入到另一文件之中。由于输入需要大量的数据,可采用从“随机数.txt”中读取数据。存入文件算法:intinput()ofstreamoutFile;outFile.open(e:/程序设计/practice1/算法设计与分析文本文件夹D/number.txt,ios:trunc);if(!outFile.is_open()coutcoutcharnumber;intlength=0;cinnum

9、ber;while(number!=e)length+;outFilecinnumber;outFile.close();returnlength;文件数据提取算法:int*output(intlength)ifstreaminFile;ofstreamoutFile;inFile.open(e:/程序设计/practice1/算法设计与分析/文本文件夹D/number.txt);outFile.open(e:/程序设计/practice1/算法设计与分析/文本文件夹D/result2.txt,ios:trunc);char*Array=newcharlength;int*List=newin

10、tlength/2;inti=0,j=0;outFilewhile(!inFile.eof()inFileArrayi;if(Arrayi!=,0;outFilej+;i+;sort(List,length/2);inFile.close();outFile.close();returnList;3.程序运行时间测量:为了得到二分搜索的时间,主要是排序的时间,调用time标准库,通过对起止时间记录,得到运行时间。doublestart,end,Time;start=clock();调用程序;end=clock();Time=end-start;四实验数据分析:当测试的数据较少时,如输入个数为2

11、0个时,两种排序时间都为0,即两种排序所消耗的时间差不多。在数据小于2000个时,它们的耗费时间是代价相等的。但当数据规模十分庞大时,快速排序的时间代价远远低于冒泡排序,例如当输入的数据为3000个时,快速排序的时间消耗是冒泡排序的1/3,由此可见一斑,并且当输入的数据完全逆序时,快速排序将和冒泡排序一样复杂。最后将排序的时间与查找的时间相加,即为二分搜索的总时间,为n(logn)+time.五实验感受:在本次实验中,测试程序的运行时间时,需要用到大量的数据,仅仅输入100以内的数据对时间的测试不起作用,故用随机数生成并读取,解决了测试时间不明显的问题。而对于输入的数据,其顺序也有一定影响性。

12、篇三:冒泡排序和二分查找实验报告冒泡排序和二分查找实验报告一实验题目:基于冒泡排序的二分查找二实验要求:2.1:输出在顺序表中利用二分的方法查找关键字9的过程。2.2:实现冒泡排序的过程,并输出9,8,7,6,5,4,3,2,1,0的过程三实验内容:3.1动态查找表的抽象数据类型:ADTDynamicsearchTable数据对象D:D是具有相同特性的数据元素的集合。各个数据元素均含有类型相同,可唯一标识数据元素的关键字数据关系R:数据元素同属一个集合。基本操作p:InitDsTable(操作结果:构造一个空的动态查找表DT。DestroyDsTable(初始条件:动态查找表DT存在,key为

13、和关键字类型相同的给定值。操作结果:若DT中存在其关键字等于key的数据元素,则函数值为该元素的值或在表中的位置,否则为“空”。InsertDsTable(初始条件:动态查找表DT存在,e为待插入的数据元素。操作结果:若DT中不存在其关键字等于e.key的数据元素,则插入e到DT。DeleteDsTable(初始条件:动态查找表DT存在,key为和关键字类型相同的给定值。操作结果:若DT中存在其关键字等于key的数据元素,则删除之。TraverseDsTable(DT,visit();初始条件:动态查找表DT存在,visit是对结点操作的应用函数。操作结果:按某种次序对DT的每个结点调用函数v

14、isit()一次且至多一次,一旦visit()失败,则操作失败。ADTDynamicsearchTable3.2存储结构的定义;/二分查找#definemaxn100typedefstructintkey;chardata10;nodeType;typedefnodeTypeseqListmaxn;/冒泡排序#definemaxn20typedefstructintkey;chardata10;RecType;3.3基本操作实现:intbinsearch(seqListR,intn,intk)intl=0,r=n-1,mid,count=0;while(lmid=(l+r)/2;printf(

15、第%d次比较:在%d,R%d:%dn,+count,l,r,mid,Rmid.key);if(Rmid.key=k)returnmid;%d中比较元素elseif(Rmid.keyk)r=mid-1;elsel=mid+1;return-1;voidbubblesort(RecTypeR,intn)inti,j,k;RecTypetemp;for(i=0;ifor(j=n-1;ji;-j)if(Rj.keytemp=Rj;Rj=Rj-1;Rj-1=temp;printf(i=%d,冒出的最小关键字:%d,结果为:,i,Ri.key);for(k=0;kprintf(%2d,Rk.key);pr

16、intf(n);3.4解题思路:二分查找:因为原本便是顺序表,是递增序列,所以在一个区间中,我们只要每次判断中间节点和被查找的关键字的大小关系,就可以判断被查找的节点在那一段区间了,然后再进行二分即可。冒泡排序:通过一次一次的交换,把无序序列中关键字最小的节点的值交换到前面即可。3.5解题过程:实验源代码如下:3.5.1二分查找#include#definemaxn100typedefstructintkey;chardata10;nodeType;typedefnodeTypeseqListmaxn;intbinsearch(seqListR,intn,intk)intl=0,r=n-1,m

17、id,count=0;while(lmid=(l+r)/2;printf(第%d次比较:在%d,R%d:%dn,+count,l,r,mid,Rmid.key);if(Rmid.key=k)returnmid;elseif(Rmid.keyk)r=mid-1;elsel=mid+1;return-1;intmain()%d中比较元素seqListR;intk=9;inta=1,2,3,4,5,6,7,8,9,10,i,n=10;for(i=0;iRi.key=ai;printf(关键字序列:);for(i=0;iprintf(%d,Ri.key);printf(n);printf(查找%d的比较过程如下:n,k);if(i=binsearch(R,n,k)!=-1)printf(元素%d的位置是:%dn,k,i);elseprintf(元素%d不在表中n,k);return0;3.5.2冒泡排序#include#definemaxn20typedefstructintkey;chardata10;RecType;voidbubblesort(RecTypeR,intn)inti,j,k;RecTypetemp;for(i=0;ifor(j=n-1;ji;-j)if(Rj.key

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1