算法第二章上机实验报告

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 的使用有疑惑,并且在数组的定义上有不解。在出现为题之后我们一起思考,寻找解决方法,

 









以上是关于算法第二章上机实验报告的主要内容,如果未能解决你的问题,请参考以下文章

算法第二章上机实验报告

算法第二章上机实验报告

算法第二章上机实验报告

算法第二章上机实验报告

算法第二章实践上机实验报告

算法第二章上机实验报告