二分搜索算法实验报告_第1页
二分搜索算法实验报告_第2页
二分搜索算法实验报告_第3页
二分搜索算法实验报告_第4页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本文格式为word版,下载可任意编辑二分搜索算法实验报告 试验一 二分搜寻算法试验报告 一 试验目得 1、 理解分治算法得概念与基本要素; 2、 理解递归得概念; 3、 把握设计有效算法得分治策略; 4、 通过二分搜寻技术学习分治策略设计技巧; 二 二. 试验内容及要求 1. 使用二分搜寻算法查找任意个有序数列中得指定元素。 2 通过上机试验进行算法实现。 . 保存与打印出程序得运行结果,并结合程序进行分析,上交试验报告。 4、 至少使用两种方法进行编程。 三 三. 试验原理 二分搜寻算法也称为折半查找法,它充分利用了元素间得次序关系,采纳分治策略,可在最坏得状况下用 o(lo n)完成搜寻任

2、务。 【基本思想】将个元素分成个数大致相同得两半,取 an与欲查找得 x 作比较,假如n/2则找到,算法终止。假如 xan/2,则我们只要在数组得左半部连续搜寻 x(这里假设数组元素呈升序排列)。假如 xa/2,则我们只要在数组 a 得右半部连续搜寻。 二分搜寻法得应用极其广泛,而且它得思想易于理解。第一个二分搜寻算法早在 146 年就消失了,但就是第一个完全正确得二分搜寻算法直到92 年才消失。bentey 在她得著作wrtg corect prras中写道,0%得计算机专家不能在 2 小时内写出 完全正确得二分搜寻算法。问题得关键在于精确地制定各次查找范围得边界以及终止条件得确定,正确地归

3、纳奇偶数得各种状况,其实整理后可以发觉它得详细算法就是很直观得。 ² 方法一:直接查找 穷举法遍历 ² 方法二:递归查找 #incluetdi、h #efne ma 3 i binrear( a,nt x,int lt,nt igh) if(lefrig) rt 1; els left=(et+rigt)/2; f(lft) retr eft; ele if(xlet) binarysearch(a,lft,rght); ese inaryseh(,x,ft-righ,lt+); main() in max; int d,x,i,,p; rnf(输得个数n); canf(%

4、d,); printf(数组数据n); for(i0;i;i+) scanf(%d,ai); fo (i=0;in-;i+) p=i; r (j+1;jn;j+) i (apaj) p=; if (p!=) ap; p=a; ai; fo(i=0;in;i+) pinf(%d ,ai); pit(输入要查找得数n); scanf(%d,); oun=inarysarc(,,0,n); f(fon=-1) rint(未找到); else prinf(要查找得数在第 个n,found); ² 方法三:迭代查找 #incdedo、 #defne m 30 nt binarysarch(i

5、a,int x,it n) int eft =0; int ri=n-1; it middle; whe(eft=riht) midle(lft+right)/2; i(x=mdd) retrn dle; if(xamidde) ftmiddle+; l right=middle-1; rurn; in() int amax; int found,x,n,i,j,p; rinf(数得个数); anf(%d,n); print(数组数据n); f(i=0;in;i+) saf(%d,ai); or (i=;i-;+) =i; fr (=i+;n;j+) if (aaj) p=j; f (!=j)

6、 x=ap; ap=i; a=; for(i=0;in;i+) pnt(d ,i); rnf(输入要查找得数n); sc(%d,x); fun=biaysearch(,x,n); if(fun=-1) print(未找到); else printf(要查找得数在第 %d 个,found+1); 四 程序代码 变量定义说明: bnrysearh()算法: a-数组 k-要查找得元素 lft左标志 rh-右标志 (n-数据个数) man()主函数: 标下为值其到找,到找未示表-,志标到找否是就-dnuox-要查找得元素 n-元素个数 i,,p-循环掌握变量 (1)、递归查找 ncudestdio、

7、h din mx 30 int binayseach(int a,int ky,nt left,nt ght) in md(riht-righ)2+lef; f(amid=k) reur md; if(let=rig) reurn 1; lse if(keyamd) retun inaysrch(,key,mid+1,ight); else if(kaid) eturn binarearc(a,key,left,mi 1); rturn ; it i(oid) nt max; in fond,x,n,i,j,p; pif(数据个数:); san(%,); print(输入数据:n); for(

8、=0;in;i+) pf(请输入第d 个数据:,); sca(%,a); r (i;n-1;i+) /选择排序 p=i; )+j;j;1+=j(rof i(paj) ;=p )j=!( i x=ap; ap=ai; aix; rit(排序后得数据如下:); for(i0;in;+) prnf(d ,a); printf(n); printf(输入要查找得数:); scanf(%d,); int lef=0,igh=n; foundbiarserch(a,,left,right); i(found=1) prif(未找到n); ele printf(要查找得数在第%d 个,fud1); (2)、

9、非递归查找 #cluesio、h defi max 3 int binaryarch(n , int key, ln) t dlen/; if (ey=ami) ern i; it let0; in rghtn-; hile(let=right) 找查代迭 md=(riht+lt)/2; if(eyamid) riht=id1; ele if(keyamd) ft=id; lse retun mi; return -; nt min(voi) int amax; nt foud,x,n,i,j,p; print(数据个数:); scan(%d,); pintf(输入数据:n); for(i=0

10、;in;i+) ;)i,:据数个%第入输请(tirp scanf(%d,ai); fr (i=;in1;+)/ 序排择选 ;i=p fr(j=+1;j;j+) if(apaj) =j; i (p!=j) x=ap; ap=a; =x; pinf(排序后得数据如下:); for(i=0;n;i+) prntf(%d ,ai); printf(n); print(输入要查找得数:); scan(%d,x); t lft=0,rghn; found=naysech(a,x,n); if(foud=) rinf(未找到); ls pintf(要查找得数在第%d 个n,fud+1); 五 结果运行与分析 找到要查找得数据: 未找到要查找得数据: 六心得与体会 通过这次试验,巩固了自己对二分搜寻算法得理解,它就是分治法得一个特别例子,由此也对分治法有了更深一层次得熟悉。分而治之,化简单为简洁,不只就是在算法中,在日常生活中也就是极其重要得。正如 betley 在她得著作witig correct rams中所说,能够完整得写出二分搜

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论