算法设计与分析二分查找实验报告
更新时间:2024-02-27 08:54:01 阅读量: 综合文库 文档下载
课 程 设 计 说 明 书
设计题目: 二分查找程序的实现
专业: 班级:
设计人:
山 东 科 技 大 学 年 月 日
课 程 设 计 任 务 书
学院:信息科学与工程学院 专业: 班级: 姓名:
一、课程设计题目: 二分查找程序的实现 二、课程设计主要参考资料
(1) 计算机算法设计与分析(第三版)王晓东著 (2) 三、课程设计应解决的主要问题
(1) 二分查找程序的实现 (2) (3) 四、课程设计相关附件(如:图纸、软件等):
(1) (2)
五、任务发出日期: 2013-11-21 课程设计完成日期: 2013-11-24
指导教师签字: 系主任签字 :
指导教师对课程设计的评语
成绩:
指导教师签字:
年 月 日
二分查找程序的实现
一、 设计目的
算法设计与分析是计算机科学与技术专业的软件方向的必修课。同时,算法设计与分析既有较强的理论性,也有较强的实践性。算法设计与分析的实验过程需要完成课程学习过程各种算法的设计和实现,以达到提高教学效果,增强学生实践动手能力的目标。
用分治法,设计解决二分查找程序的实现问题的一个简捷的算法。通过解决二分查找程序的实现问题,初步学习分治策略。
二、 设计要求
给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。实现二分搜索的递归程序并进行跟踪分析其执行过程。
用顺序搜索方法时,逐个比较a[0:n-1]中的元素,直至找出元素x,或搜索遍整个数组后确定x不在其中。这个方法没有很好的利用n个元素已排好序这个条件,因此在最坏情况下,顺序搜索方法需要O(n)次比较。要求二分法的时间复杂度小于O(n)。
三、 设计说明 (一)、需求分析
二分搜索方法充分利用了元素间的次序关系,采用分治策略,可在最坏情况下用O(logn)时间完成搜索任务。
该算法的流程图如下:
开始bott=0,top=n-1bott<=topYmid=(bott+top)/2x==a[mid]N已找到未找到x
(二)、概要设计
二分查找的基本思路是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法终止;如果xa[n/2],则只要在数组a的右半部分继续搜索x。
由于二分查找的数组不一定是一个整数数组,所以我采用了C++中的模板函数,将排序函数Sort和二分查找函数BinarySort写为了模板函数,这样不尽可以查找整数数组,也可以查找小数数组。
由于查找的数组的长度不固定,所以我用了C语言中的malloc和realloc函数,首先定义一个数组指针,用malloc函数该它分配空间,然后向数组中存数,当数组空间满时,在用realloc函数为数组再次分配空间。由于在随机输入一组数时不知在什么位置停止,所以
在输入完一组数之后,按Ctrl+Z键结束输入,然后再用cin.clear()将输入恢复,再继续输入。
(三)、详细设计
#include
for(int i = 1;i <= num-1;i++){ for(int j = 0;j < num-i;j++){ if(a[j] > a[j+1]) {
temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } }
template
int BinarySearch(Type *a,Type x,int m){ int left=0; int right=m-1; while(left<=right){
int middle = (left+right)/2; if(x==a[middle]) return middle; if(x>a[middle]) left=middle+1; else
right=middle-1; } return -1; }
int main(){
int *a,num,length,i = 0; a = (int *)malloc(sizeof(int)*N);
cout<<\请输入一组数(Ctrl+z停止输入)\ while(cin>>a[i]){ i++;
if(i>=N){
a = (int *)realloc(a,sizeof(int)*(length+n)); length += n; } } sort(a,i);
for(int j = 0;j cout< cout<<\请输入要查找的数:\ cin>>num; if(BinarySearch(a,num,i)!=-1){ cout< cout< double *b,num1; int length1,i1 = 0; b = (double *)malloc(sizeof(double)*N); 组 中 , cout<<\请输入一组数\ while(cin>>b[i1]){ i1++; if(i1>=N){ b = (double *)realloc(a,sizeof(double)*(length1+n)); length1 += n; } } sort(b,i1); for(int j = 0;j cout< cout<<\请输入要查找的数:\ cin>>num1; if(BinarySearch(b,num1,i1)!=-1){ cout< cout< 组 中 , } return 0; 四、运行结果及分析 运算结果: 分析: 很容易看出,每执行一次算法的while循环,待搜索数组的大小减小一半。因此,在最坏情况下,while循环被执行了O(logn)次。循环体内运算需要O(1)时间,因此,整个算法在最坏情况下的时间复杂性为O(logn)。 五、总结 通过这次试验,解决了二分查找问题,加深了对分治法的理解,收获很大,同时我也理解到学习算法是一个渐进的过程,算法可能一开始不是很好理解,但是只要多看几遍,只看是不够的还要动手分析一下,这样才能学好算法。
正在阅读:
算法设计与分析二分查找实验报告02-27
信贷业务档案管理实施办法11-27
长辈生病了晚辈去看望说什么.doc05-01
医院“2017年抗菌药物合理使用宣传周”活动情况总结09-20
难忘的小学生活作文500字07-17
VRAY渲染器的相关介绍08-17
幼儿园小班社会教案我们一起玩04-25
医疗废物高温蒸汽灭菌处理系统技术参数03-21
浅谈外贸英语的常用翻译方法12-03
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 二分
- 算法
- 查找
- 实验
- 报告
- 分析
- 设计
- 三年级上学期时间问题习题
- C15101 行业比较研究方法
- 氧气瓶和乙炔瓶的安全技术操作规程
- 发电厂的设备检修 - 图文
- 软件测试基础(自己在培训学校的笔记)
- 医疗器械各种记录表格(横表)
- 第二轮面试问题(1)
- 机械设计作业题
- 保温节能监理实施细则
- 创新活动载体激发党建活力 - 图文
- 2011新东方政治核心考点完美整理 - 图文
- 2019粤教版高中物理选修3-13.3《探究安培力》word课时检测
- 观察水中的微生物实验报告单
- 常用贸易术语英语词汇及缩略语必备学习
- 学医者必记中医经典语录
- 节约型校园节能监管系统技术方案
- 中小学教师日常行为规范
- 五年级解方程和应用题知识点和例题
- 机床数控技术考试神器
- 2017年9月16日党员参观学习体会