码迷,mamicode.com
首页 > 编程语言 > 详细

【算法】第二章上机实验报告

时间:2018-10-14 13:43:55      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:老师   数值   bin   描述   font   设置   算法   个人   体会   

实践题目; 二分查找
问题描述:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。PS:该问题就是查找/搜索题,以实例,输入n个数值,从中间开始查找关键字x,比较mid与x,查找成功则输出,不行就将mid与x比较,缩小查找范围,还要记录比较次数
算法描述:int Binary(int a[],int n,int key)

{

int x;                      //定义变量

int left=0,t=0;

int right=n-1;

while(left<=right)            //设置while循环条件,当left<=right即为数组有至少一个元素,可进行循环查找。

{

int mid=(left+right)/2;    //二分法的基本思想,将n个元素等分 ①

t++;                   // 记录比较次数,每做一次比较即有t值加一  ②

if(a[mid]==key) // 将中值与关键字进行比较。

{

cout<<mid<<endl; //输出

cout<<t;

return mid;

}

 if(a[mid]<key)          //关键字大于中值,则将left左值变成中值+1,往右缩小查找范围。

{

left=mid+1;

}

else right=mid-1;       //同理,关键字小于中值,则将right右值变成中值-1,往左缩小查找范围。

//再次回到条件,执行①②;

}

cout<<"-1"<<endl;

cout<<t;

return -1;

}

时间复杂度和空间复杂度:以最坏情况考虑,二分查找第一次在n/2中查找(n为元素个数);第二次在一半的一半中查找,即n/2/2=n/4;……第x次在n/2^x范围内查找,即2^x=n(x=log2^n),所以时间复杂度为O(log2^n)另外,这个是非递归情况在这个过程中,辅助空间为常数级别,所以空间复杂度为O(1)

心得体会:

一、本次实践收获:和队友一起变成的准确率的确提高了不少,而且完成地变自己一个人时更有效率,还有,在编程过程中,我们一起讨论问题,自己说错了队友会及时说出正确的解答,说对了队友也能补充一下,就这样彼此对题目的有了更深刻的印象。有时讨论问题也会引申出其他的知识,促进自己去思考,上述种种让我收益颇丰!

二、疑惑:有时候,两个人的力量也是有限的,就像编程第二题时,老师给我们提了一下意见,但是我们两个人没有优化好算法,最后还是再次问老师才解决了,还有的话,结对确实要两个人的编程水平大致一样,这样的话双方才会有更大的进步,因为如果一个很厉害,另外一个一般,这样可能会出现分工不均的情况。(当然啦,我和我的队友合作的很愉快)

 

【算法】第二章上机实验报告

标签:老师   数值   bin   描述   font   设置   算法   个人   体会   

原文地址:https://www.cnblogs.com/Jergens/p/9785545.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!