zoukankan      html  css  js  c++  java
  • 算法第二章上机报告

    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.问题描述

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

    1、对输入的数组

    2、二分法

    3.查找成功,输出其所在位置,以及比较次数

    4、失败,输出-1及比较次数

    3.算法描述

     1 #include<iostream>
     2 using namespace std;
     3 extern int sum=0;
     4 
     5 int BinarySearch(int a[],const int &x,int n)
     6 {
     7     int left = 0;
     8     int right = n-1;
     9     while (left <= right)
    10     {
    11         sum++;
    12         int middle = (left + right)/2;
    13         if(x == a[middle]) return middle;
    14         if(x > a[middle]) left = middle + 1;
    15         else right = middle - 1;
    16     }
    17     return -1;
    18 } 
    19 
    20 int main()
    21 {
    22     int n,a[1000],x,result;
    23     cin>>n;
    24     for(int i=0;i<n;i++)
    25         cin>>a[i];
    26     cin>>x;
    27     
    28     result = BinarySearch(a,x,n);
    29     cout<<result<<endl<<sum;
    30     return 0;
    31 
    32 }

    4.算法时间及空间复杂度分析

    1、时间复杂度:1)、本题使用的是二分查找算法,

             2)、while循环一次,待查找数组的长度减小至前一次的一半

             3)、时间复杂度为T(n) = O(logn)

     

    2、空间复杂度:1)、辅助空间是常数级别的,

                               2)、空间复杂度为O(1)

     

    5.心得体会

    能理解二分法的使用,同时在三道题的巩固下,对二分法有加深了印象,同时和同学一同完成,还能互相提示,而且,还能够互相讲思路,同时能够指出对方的不足,以及自己的某些细节方面的缺漏,最后对于老师的提问还是有些害怕,就是对同学能够清晰的讲出来,但是面对老师不敢,这真的是一件很神奇的事情,下次加油。

     

  • 相关阅读:
    jsp JavaBean配置
    jsp response对象
    tomcat 多servlet配置
    jsp session
    什么才是永恒?
    Class Diagram Of elvish ray 0.6 For Reference
    Dataflow
    过生日
    我们开始设计软件架构
    寻回旧作——Mars Princess
  • 原文地址:https://www.cnblogs.com/JeffKing11/p/11576068.html
Copyright © 2011-2022 走看看