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. 心得体会:一开始的时候我是把“b++;”这个语句放在每一个if判断后的,经过老师的提醒才想到原来可以就放在while函数里就好,不用重复三次。可以让代码变得更简洁,以后编程或者做题的时候,能简洁就尽量简洁。还有,编程习惯,代码风格真的很重要,这是我以后要改进的地方。
  • 相关阅读:
    Hadoop集群(三) Hbase搭建
    Hadoop集群(二) HDFS搭建
    Hadoop集群(一) Zookeeper搭建
    Redis Cluster 添加/删除 完整折腾步骤
    Redis Cluster在线迁移
    Hadoop分布式HA的安装部署
    Describe the difference between repeater, bridge and router.
    what is the “handover” and "soft handover" in mobile communication system?
    The main roles of LTE eNodeB.
    The architecture of LTE network.
  • 原文地址:https://www.cnblogs.com/icyk/p/9794443.html
Copyright © 2011-2022 走看看