算法第二章上机实验报告
Posted jiaojishijiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法第二章上机实验报告相关的知识,希望对你有一定的参考价值。
1、实践题目
7-1 二分查找 (20 分)
输入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
2、问题描述
使用二分法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
3、算法描述
使用了二分法 如果x=a[middle]则找到了x,结束。如果x不等于a[middle],若x<a[middle]则再数组的左边进行查找 若x>a[middle]则再数组的有边进行查找。再重复第一步,进行循环,直到找到x,若数组中没有x,则输出-1。
代码实现
#include <iostream>
using namespace std;
int BinarySearch(int a[],int x,int n){
int left = 0;
int right =n-1;
int count =0;
while(left <= right){
int middle = (left + right)/2;
count++;
if(x== a[middle]){
cout<<middle<<endl;
cout<<count;
return middle;
}
if(x>a[middle]){
left =middle + 1;
}
else {
right = middle -1;
}
}
cout<<"-1"<<endl;
cout<<count;
return -1;
}
int main(){
int n;
cin>>n;
int *a=new int[n];
for(int i=0; i<n;i++){
cin>>a[i];
}
int x;
cin>>x;
BinarySearch(a,x,n);
return 0;
}
4、算法时间及空间复杂度分析
如果数组中有n个元素:
因为二分查找每次排除掉一半不适合条件的数,
一次二分剩下:n/2
两次二分剩下:n/2/2 = n/4
。。。
m次二分剩下:n/(2^m)
在最坏情况下是在排除到只剩下最后一个值之后得到结果,所以为
n/(2^m)=1;
2^m=n;因此时间复杂度为:log2n
空间复杂度:每一个变量的空间复杂度都是O(1),所以算法空间复杂度为O(1)。
5、心得体会
在本题的代码实现时对return 的使用有疑惑,并且在数组的定义上有不解。在出现为题之后我们一起思考,寻找解决方法,
以上是关于算法第二章上机实验报告的主要内容,如果未能解决你的问题,请参考以下文章