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

    实践题目:7-2 改写二分搜索算法

    问题描述:a[0:n-1]是已排好序的数组,请改写二分搜索算法,使得当x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。

    输入格式:

    输入有两行:

    第一行是n值和x值; 第二行是n个不相同的整数组成的非降序序列,每个整数之间以空格分隔。

    输出格式:

    输出小于x的最大元素的最大下标i和大于x的最小元素的最小下标j。当搜索元素在数组中时,i和j相同。 提示:若x小于全部数值,则输出:-1 0 若x大于全部数值,则输出:n-1的值 n的值

    代码:
    #include <iostream>
    using namespace std;
    
    int bisearch(int* a, int x, int l, int r) {
        if(l > r) 
        {
    
            cout<<r<<" "<<l;
            return 0;
        }   
        else
        {
            int mid = (l+r) / 2;
            if (x == a[mid]) 
            {
                cout<<mid<<" "<<mid;
                return 0;
            }   
             
            if (x < a[mid])
                bisearch(a, x, l, mid-1);           
            else
                bisearch(a, x, mid+1, r);
    
        }
    }
    int main() {
        int a[1001];
        int n, x;
        cin >> n;
        cin >> x;
        for(int i = 0; i < n; i++) 
         cin >> a[i];
        bisearch(a ,x, 0, n-1);
        return 0;
        
    }
    View Code

    算法描述改写二分算法的输出部分,结合递归算法,输出中位数。

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

    ①比较,赋值:4O(1)

    ②递归:T(n/2)

    T(n) = 4 + T(n/2)

    = 4 + 4 + T(n/4)

    = ...

    =O(log2n)

    心得体会

    1.这次实践题目是根据二分查找进行改编,解决不同问题,让人感受到算法的强大魅力。

    2.这次将循环结构while与递归比较if...else...搞混,程序的开销增多。结队打代码能发现自己所打代码出现的问题,也能学到很多自己所不知道的知识。

  • 相关阅读:
    ssh无密码登录设置方法以及出现问题 ECDSA host key 和IP地址对应的key不同的解决
    asp.net core 3 Swagger 添加 Authorization [Bearer token]
    asp.net core3 发布到IIS
    asp.net core 3.1 使用log4net
    asp.net core 3 跨域
    解决'vue' 不是内部或外部命令,也不是可运行的程序 或批处理文件的方法
    ReSharper 安装没有提示功能
    Python3 安装MySQL驱动
    win10 安装 Python 和 pip 详解
    Win10下 80端口被system(pid=4)占用的解决方法
  • 原文地址:https://www.cnblogs.com/liuyuany/p/11572953.html
Copyright © 2011-2022 走看看