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函数里就好,不用重复三次。可以让代码变得更简洁,以后编程或者做题的时候,能简洁就尽量简洁。还有,编程习惯,代码风格真的很重要,这是我以后要改进的地方。
  • 相关阅读:
    古典问题rabbit
    输入两个正整数m和n,求其最大公约数和最小公倍数
    水仙花数
    输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。
    mybatis中的#和$的区别
    SpringMVC 中整合JSON、XML视图
    Gson简要使用笔记
    Spring Framework Artifacts
    Quartz的cron表达式
    清除svn文件目录的bat脚本
  • 原文地址:https://www.cnblogs.com/icyk/p/9794443.html
Copyright © 2011-2022 走看看