第二章上机实践报告

Posted sufeifan1020

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和比较次数。

    2. 问题描述:问题是让我们设计一个二分查找,在已经输入的数组里找到我们输入的数字,并输出这个数字所在的下标。同时提示我们当这个数字不存在的时候可以输出-1但也要显示比较了多少次才发现该数不存在。非降序排列的整数存在两个或两个以上的数字相同的情况。
    3. 算法描述:首先将我们输入的n个整数分成个数大致相同的两半,取a【n/2】与所查的数字作比较。如果和a[n/2]相等则找到,该算法终止。如果x<a[n/2],则只在数组a的左半部分继续搜索即可,反之就在a数组的右半部分搜索,直至找到该数字,同时记录每一次查找比较的次数用来最后输出。                           #include <iostream>
      using namespace std;
      int main(){
       int n,x;
       cin>>n;
       int a[1000];
       for(int i=0;i<n;i++){
        cin>>a[i];
       }
       cin>>x;
       
       int left = 0;
       int right = n-1;
       int count = 0;
       while(left<=right){
        count++;
        int mid = (left+right)/2;
        if (x == a[mid]){
        cout<<mid<<endl<<count;
        return 0;
        }
        
        if(x>a[mid]) left = mid+1;
        else right = mid - 1;
       }
       cout<<"-1"<<endl<<count;
      }
    4. 算法时间及空间复杂度分析(要有分析过程):每执行一次while循环,带搜索数组的大小减小一半,最优O(1),最坏O(logn)。

    5. 心得体会(对本次实践收获及疑惑进行总结):首先题目里的非降序数组就规定了该数组一定是从小到大,但是也存在两个或两个以上数字相同的情况,这就可以直接进行比较了。我和卢涵对于该将记录比较次数的程序放在哪里进行了讨论,同时参考书上源代码进行编程。整个下午我们解出了两道题,和同伴一起思考编程的感觉非常好,可以互相提醒,比如我经常写程序的时候会有语法错误,卢涵就会帮我一一指正,我也能帮她理清解题思路。



























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

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

第二章上机实践报告

算法第二章上机实践报告

算法第二章上机实践报告

算法第二章上机实践报告

算法第二章上机实践报告