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

算法第二章上机实践报告

时间:2018-10-14 16:51:07      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:存在   通过   if语句   div   题目   sea   判断   总结   else   

1.实践题目

输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。

2.问题描述

用二分法在输入的有序排列整数中查找数x。若找到,输出x的下标和比较次数;若找不着,输出-1和比较次数。

3.算法描述

由于此问题只是比书上的二分搜索算法多输出一个比较次数,所以我用变量k来记录比较次数,并在二分搜索法的变量中用&k来改变k的值。

由于要同时输出两个数据,所以当条件成立时我直接在函数中进行输出;当条件不成立时我用if语句进行判断后进行输出。

函数算法:

int BinnarySearch(int a[],int left,int right,int x,int &k)

{ 
if(left>right) return 0;
int m=(right+left)/2;
if(a[m]==x) 
{
k++;
cout<<m<<endl<<k;
return 1;
}
if(a[m]>x) 
{
k++;
BinnarySearch(a,left,m-1,x,k);}
else 
{
k++;
BinnarySearch(a,m+1,right,x,k);
}
}

main函数中if语句的判断:

if (BinnarySearch(a,0,n-1,x,k)==0) cout<<-1<<endl<<k;

4.算法时间及空间复杂度分析(要有分析过程)

由于本题空间复杂度为o(1),时间复杂度T(n)=o(1)+T(n/2),故本题时间复杂度为o(1)。

5.心得体会(对本次实践收获及疑惑进行总结)

对我而言,本次实践的难点为如何返回比较次数的值,因为函数中无法同时返回下标和比较次数两个值,后来发现可以通过&k来改变main函数中的k值(k为比较次数),故BinnarySearch函数中只需返回一个值即可,本题就很好解决了。

算法第二章上机实践报告

标签:存在   通过   if语句   div   题目   sea   判断   总结   else   

原文地址:https://www.cnblogs.com/Pak-Ho/p/9786028.html

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