欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    二分搜索算法实验报告(共9页).doc

    • 资源ID:12204982       资源大小:122KB        全文页数:9页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    二分搜索算法实验报告(共9页).doc

    精选优质文档-倾情为你奉上实验一 二分搜索算法实验报告一 实验目的1、 理解分治算法的概念和基本要素;2、 理解递归的概念;3、 掌握设计有效算法的分治策略;4、 通过二分搜索技术学习分治策略设计技巧;二实验内容及要求1 使用二分搜索算法查找任意N个有序数列中的指定元素。2 通过上机实验进行算法实现。3 保存和打印出程序的运行结果,并结合程序进行分析,上交实验报告。4. 至少使用两种方法进行编程。三实验原理二分搜索算法也称为折半查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。【基本思想】将n个元素分成个数大致相同的两半,取an/2与欲查找的x作比较,如果x=an/2则找到x,算法终止。如果x<an/2,则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>an/2,则我们只要在数组a的右半部继续搜索x。二分搜索法的应用极其广泛,而且它的思想易于理解。第一个二分搜索算法早在1946 年就出现了,但是第一个完全正确的二分搜索算法直到1962年才出现。Bentley在他的著作Writing Correct Programs中写道,90%的计算机专家不能在2小时内写出完全正确的二分搜索算法。问题的关键在于准确地制定各次查找范围的边界以及终止条件的确定,正确地归纳奇偶数的各种情况,其实整理后可以发现它的具体算法是很直观的。² 方法一:直接查找 穷举法遍历² 方法二:递归查找#include<stdio.h>#define MAX 30int BinarySearch(int a,int &x,int left,int right) if(left>right) return -1; else left=(left+right)/2; if(x=aleft) return left; else if(x>aleft) BinarySearch(a,x,left+1,right); else BinarySearch(a,x,left*2-right,left+1); main()int aMAX; int found,x,n,i,j,p; printf("输的个数n"); scanf("%d",&n); printf("数组数据n"); for(i=0;i<n;i+) scanf("%d",&ai); for (i=0;i<n-1;i+) p=i; for (j=i+1;j<n;j+) if (ap>aj) p=j; if (p!=j) x=ap; ap=ai; ai=x; for(i=0;i<n;i+) printf("%d ",ai); printf("输入要查找的数n"); scanf("%d",&x); found=BinarySearch(a,x,0,n); if(found=-1) printf("未找到n"); else printf("要查找的数在第 %d个n",found+1); ² 方法三:迭代查找#include<stdio.h>#define MAX 30int BinarySearch(int a,int &x,int n) int left =0; int right=n-1; int middle; while(left<=right) middle=(left+right)/2; if(x=amiddle) return middle; if(x>amiddle) left=middle+1; else right=middle-1; return-1;main() int aMAX; int found,x,n,i,j,p; printf("数的个数n"); scanf("%d",&n); printf("数组数据n"); for(i=0;i<n;i+) scanf("%d",&ai); for (i=0;i<n-1;i+) p=i; for (j=i+1;j<n;j+) if (ap>aj) p=j; if (p!=j) x=ap; ap=ai; ai=x; for(i=0;i<n;i+) printf("%d ",ai); printf("输入要查找的数n"); scanf("%d",&x); found=BinarySearch(a,x,n); if(found=-1) printf("未找到n"); else printf("要查找的数在第 %d 个n",found+1); 四 程序代码变量定义说明:BinarySearch()算法:a->数组key->要查找的元素left->左标志right->右标志(n->数据个数)Main()主函数:ound->是否找到标志,-1表示未找到,找到其值为下标x->要查找的元素n->元素个数i,j,p->循环控制变量(1) 、递归查找#include<stdio.h>#define MAX 30int BinarySearch(int a,int key,int left,int right) int mid=(right-right)/2+left; if(amid=key) return mid; if(left>=right) return -1; else if(key>amid) return BinarySearch(a,key,mid+1,right); else if(key<amid) return BinarySearch(a,key,left,mid- 1); return -1; int main(void)int aMAX; int found,x,n,i,j,p; printf("数据个数:"); scanf("%d",&n); printf("输入数据:n"); for(i=0;i<n;i+) printf("请输入第%d个数据:",i); scanf("%d",&ai); for (i=0;i<n-1;i+)/选择排序 p=i;for(j=i+1;j<n;j+)if(ap>aj)p=j;if (p!=j) x=ap; ap=ai;ai=x; printf("排序后的数据如下:"); for(i=0;i<n;i+) printf("%d ",ai); printf("n"); printf("输入要查找的数:"); scanf("%d",&x); int left=0,right=n; found=BinarySearch(a,x,left,right); if(found=-1) printf("未找到n"); else printf("要查找的数在第%d个n",found+1); (2) 、非递归查找#include<stdio.h>#define MAX 30int BinarySearch(int a, int key,int len) int mid=len/2; if (key=amid) return mid; int left=0; int right=len-1; while(left<=right) /迭代查找 mid=(right+left)/2; if(key<amid) right=mid-1; else if(key>amid) left=mid+1; else return mid; return -1; int main(void)int aMAX; int found,x,n,i,j,p; printf("数据个数:"); scanf("%d",&n); printf("输入数据:n"); for(i=0;i<n;i+) printf("请输入第%d个数据:",i); scanf("%d",&ai); for (i=0;i<n-1;i+)/选择排序 p=i;for(j=i+1;j<n;j+)if(ap>aj)p=j;if (p!=j) x=ap; ap=ai;ai=x; printf("排序后的数据如下:"); for(i=0;i<n;i+) printf("%d ",ai); printf("n"); printf("输入要查找的数:"); scanf("%d",&x); int left=0,right=n; found=BinarySearch(a,x,n); if(found=-1) printf("未找到n"); else printf("要查找的数在第%d个n",found+1); 五 结果运行与分析找到要查找的数据:未找到要查找的数据:六心得与体会通过这次实验,巩固了自己对二分搜索算法的理解,它是分治法的一个特殊例子,由此也对分治法有了更深一层次的认识。分而治之,化复杂为简单,不只是在算法中,在日常生活中也是极其重要的。正如Bentley在他的著作Writing Correct Programs中所说,能够完整的写出二分搜索算法是很难的,准确来说,在固定的时间内很大一部分人是不能完成这个任务的,因为其中的边界判定问题需要引起很大的注意,一不留神就容易犯错,导致结果的错误,而这种边界问题有很难找到,只有通过一步一步的演算才能完全正确的推导出来。这告诫我们,熟能生巧,只有在生活中多练习,当真正需要的时候,才能够信手拈来。专心-专注-专业

    注意事项

    本文(二分搜索算法实验报告(共9页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开