• 算法第二章上机实践报告


    实践题目:

    设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的值

    问题描述:

    这道题除了用二分搜索找出数组中的数输出其下标,还需要考虑当x不在数组中的情况,输出其相邻的下标。

    算法描述:采用二分搜索算法。检索x是否在数组中,使用递归调用,若目标数大于中位数递归右半部分,小于中位数则递归左半部分。接着判断x是否在数组中,若在,则输出两次其坐标,不在则输出其相邻的下标。

    #include<iostream>
    using namespace std;

    int t = 0;

    int binarySearch(int a[],int x,int low,int high) {
        if(low > high) {
            return low;
        }
        t++;
        int mid = (low + high)/2;
        if(a[mid] == x) {
            return mid;
        };
        if(a[mid] > x) {
            return binarySearch(a, x, low, mid-1);
        }
        else{
            return binarySearch(a, x, mid+1, high);
        }
    }

    int main() {
        int n;
        int a[1000];
        int x;
        int index;
        int left = 0;
        cin >> n >> x;
        for(int i = 0; i < n; i++) {
            cin >> a[i];
        };
        index = binarySearch(a, x, 0, n-1);
        if(a[index] != x) {
            cout << index-1 <<" "<< index <<endl;
        }
    else{
            cout << index << " " << index << endl;
        }
    }

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

    在二分搜索算法中,不断递归直至找到为止。每次递归就是n/2。所以时间复杂度为O(logn)

    空间复杂度为O(n)

    心得体会:在做题前要有一个指导思想。首先要熟悉掌握书上的代码,通过其核心的思路解决不一样的问题。有时要精简自己的代码,不然会显得繁琐,可读性也会下降。全面思考一道题,需要考虑多种情况,善于运用判断语句。在小组合作的过程中,两个人的交流能够更有效率完成题目。思路的不同有时会促进思考,在讨论的过程中收获了知识,也看到自己的不足。

  • 相关阅读:
    Qt Creater更改默认构建目录
    QT-无法定位程序输入点解决方案
    Qt qmake报错(TypeError: Property 'asciify' of object Core::Internal::UtilsJsExtension)
    python学习--交互式图形编程实例二
    python学习--交互式图形编程实例一
    python学习--面向对象程序设计实例
    python学习--面向过程程序设计实例
    python学习--程序设计方法实例一
    python学习--字典操作实例二
    python学习--文档
  • 原文地址:https://www.cnblogs.com/yehaolin/p/11573140.html
Copyright © 2020-2023  润新知