zoukankan      html  css  js  c++  java
  • 第二章上机实验报告

    1、实践题目:7-1

    2、问题描述:使用二分查找算法在n个非降序排列的整数中查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。

    3、算法描述:将n个元素分成个数大致相同的两半,取a[mid]与x比较。如果x=a[mid],则找到x,算法终止;如果x<a[mid],则只在数组a的左半部继续查找x,如果x>a[mid],则只在a的右半部继续搜索x。同时,在while语句里加一个b统计比较次数。

    4、代码如下:

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

    5、时间复杂度和空间复杂度:用了二分法搜索算法,寻找x的时间复杂度为O(logn);空间复杂度为数组空间大小,是一个常数,与变量n的取值无关。所以空间复杂度为O(1)

    6、心得体会:要灵活地运用学过的代码,将它们灵活地嵌入要解决的问题中。在解决问题时,要多考虑到最优解,也就是时间复杂度最小的解法,这有利于使算法更便捷,资源更能合理的运用。

  • 相关阅读:
    Django 支付宝付款接口的使用
    Django 处理跨域的配置、前台处理ajax
    pip安装源
    Django 缓存机制
    Django 配置使用日志
    Celery框架的基本使用方法
    python 虚拟环境的搭建
    Django 后台管理xadmin
    Python学习之路_day_16(模块搜索路径,开发规范)
    Python学习之路_day_15(模块)
  • 原文地址:https://www.cnblogs.com/jiaqiZhu/p/9827634.html
Copyright © 2011-2022 走看看