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

算法第二章上机实践报告

时间:2018-10-14 16:32:52      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:数组   一个   时间复杂度   二分法   了解   har   mes   ret   结对编程   

实践题目:二分查找

问题描述:

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

输入格式:

输入共三行: 第一行是n值; 第二行是n个整数; 第三行是x值。

输出格式:

输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。

输入样例:

4

1 2 3 4

1

输入样例:

0
2

代码:

#include <iostream>
using namespace std;
int BinarySearch(int a[],int x,int n,int &i){
int left=0;
int right=n-1;
while(left<=right){
i++;
int mid=(left+right)/2;
if(x==a[mid]) return mid;


if(x>mid)left=mid+1;
else right = mid-1;

}
return -1;//未找到 x
}
int main(int argc, char** argv) {
int n,x,mid,j=0;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
cin>>x;
mid=BinarySearch(a,x,n,j);
cout<<mid<<"\n"<<j<<endl;
return 0;
}

 

算法时间及空间复杂度分析:

时间复杂度:每执行一次算中的while循环,待搜索的数组的大小就减小一半。在最优的情况下,即第一次求得的mid就是所要找的x的位置,此时时间复杂度为O(1);最坏情况下,时间复杂度为O(logn)。

空间复杂度:因为辅助空间时=是常数级别的,所以该算法空间复杂度为O(1)。

心得体会:

这次上机实验让我对二分法有了更深刻的了解,让我能更好的在实践中灵活运用二分搜索法。另外,在结对编程过程中,我与同伴的讨论过程,也很好的提升了我对一个问题的思考解决能力,让我意识到了自己平时思考问题时,所没有想到的方面,以及打码时经常出错的地方,让我编程能力得到的一定的提升。

算法第二章上机实践报告

标签:数组   一个   时间复杂度   二分法   了解   har   mes   ret   结对编程   

原文地址:https://www.cnblogs.com/Ypaper/p/9786032.html

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