算法第二章实验报告

  1. 实践题目:二分查找。
  2. 问题描述:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
  3. 算法描述:

    int BinarySearch(int a[],int x, int n)
    {//在数组a[i]中查找X,找到返回X在数组的位置,否则返回-1
    int left = 0; int right = n-1; int count = 0;//设数组位置左边为0;右边为n-1;定义count为比较次数变量。
    while(left<=right){
    int middle = (left+right)/2;//取中间的值
    count++;//比较次数加1
    if (x == a[middle]) {
    cout << middle <<endl;//输出下标
    cout << count;//输出比较次数
    return middle;
    }
    if (x > a[middle]) left = middle + 1;
    else right = middle - 1;
    }//二分搜素思想
    cout << "-1" <<endl;
    cout << count <<endl;
    return -1;
    }//x不存在时的输出
  4. 算法时间及空间复杂度分析(要有分析过程):每执行一次while循环,待搜索数组大小减小一半,最多可能执行O(logn)次,循环体内为O(1)次,则时间复杂度为O(logn),该算法需要一个大小为n的空间辅助数组,所以空间复杂度为O(n).
  5. 心得体会(对本次实践收获及疑惑进行总结):这一次实验三道题中,这道题的算法是最简单的,也是最容易理解的,但也花了不少时间,主要难点在于输出他的比较次数上,最后多设一个变量进行累加就完成了;算法虽简单,但写出来还是会经常出错,得加强平时练习,熟悉算法与语法。

原文地址:https://www.cnblogs.com/kop126/p/9788865.html

时间: 2024-10-07 16:46:29

算法第二章实验报告的相关文章

第二章实验报告

一.题目: 7-3 两个有序序列的中位数. 二.问题描述: 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0,A1,?,AN?1的中位数指A(N?1)/2的值,即第?(N+1)/2?个数(A0为第1个数). 三.算法描述: 首先要对两个等长数组进行重新排序,可以考虑直接合并再排序或者新建一个数组进行排序.合并再排序要多次移动数据,运算次数较多,因此我选择了新建一个数组,边导入数据边进行排序. 因为两个等长数组的排列是有规律的(由小到大),所以我可以直接比较

【实践报告】算法第二章实践报告

实践报告任选一题进行分析. 1.实践题目: 7-1 二分查找 输入n值(1<=n<=1000).n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数.若x不存在,输出-1和比较次数. 输入格式:输入共三行: 第一行是n值: 第二行是n个整数: 第三行是x值. 输出格式:输出x所在的下标(0~n-1)及比较次数.若x不存在,输出-1和比较次数. 2.问题描述: 输入n值(1<=n<=1000).n个非降序排列的整数以及要查找的数x,使

算法第二章实践报告

第一道题: 第一道题要求输出查找次数,一开始我们小组用了两个二分查找算法来实现一个返回下标,一个返回计数器的值.但后来经过老师指点,我们采取了全局变量,来作为计数器,其值也是查找次数. 第二道题: 第二道题要求找不到目标的时候可以返回最邻近的两个值的下标,所以我们又添加了i和j,在每次进行大小比较之后记住比较过的元素下标.最后只需要在找不到相应元素的时候输出i和j即可. 第三道题: 第三道题要求将两个序列重新整合之后再输出中位数.老师要求做出logn的算法,但因为对算法的不熟悉,我们小组在实践课

算法第二章上机报告

1.实践题目 7-1 二分查找 (20 分) 输入n值(1<=n<=1000).n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数.若x不存在,输出-1和比较次数. 输入格式: 输入共三行: 第一行是n值: 第二行是n个整数: 第三行是x值. 输出格式: 输出x所在的下标(0~n-1)及比较次数.若x不存在,输出-1和比较次数. 输入样例: 4 1 2 3 4 1 输出样例: 0 2 2.问题描述 输入n值(1<=n<=1000)

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

算法第二章上机实践报告 https://edu.cnblogs.com/campus/gdwywm/se1803/homework/7608 1.实践题目 7-3 两个有序序列的中位数 https://pintia.cn/problem-sets/1173827583729741824/problems/1173827629514764290 2.问题描述 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A ?0 ?? ,A ?1 ?? ,?,A ?N−1 ?

2019春第二次实验报告

2019春第二次实验报告 一.实验项目名称 空战游戏 二.实验项目功能描述 在第一次实验基础上增加多台敌机,在一定的得分后发散导弹 三.项目模块结构介绍 四.实现界面展示 五.代码托管链接 https://gitee.com/wenyizhang999/ZWY/blob/master/空战游戏.cpp 六.实验总结 问题:创造无限循环模式 解决方法:编代码,未完成 总结:游戏规模越来越大,玩法越来越多,无限的空间待开发,觉得自己能完成一个游戏的开发太不容易,团队很重要. 原文地址:https:/

『嗨威说』算法设计与分析 - 算法第二章上机实践报告(二分查找 / 改写二分搜索算法 / 两个有序序列的中位数)

本文索引目录: 一.PTA实验报告题1 : 二分查找 1.1 实践题目 1.2 问题描述 1.3 算法描述 1.4 算法时间及空间复杂度分析 二.PTA实验报告题2 : 改写二分搜索算法 2.1 实践题目 2.2 问题描述 2.3 算法描述 2.4 算法时间及空间复杂度分析 三.PTA实验报告题3 : 两个有序序列的中位数 3.1 实践题目 3.2 问题描述 3.3 算法描述 3.4 算法时间及空间复杂度分析 四.实验心得体会(实践收获及疑惑) 一.PTA实验报告题1 : 二分查找 1.1 实践

算法第二章心得

学了算法的第二章以后,我对于算法思想有了进一步的理解.分治法的化繁为简,化难为易的思想,在日常生活中也能很好地体现出来.如果应用得当,往往能起到峰回路转,茅塞顿开的效果. 第二章的PTA实践,第一第二题其实检验了我们对二分搜索的掌握,以及算法的改写能力.第三题我觉得有点难度,因为它给出的序列最大长度非常大(100000),这就不得不要重视算法的时间复杂度.一开始我是在Java上运行,恰恰就是在最大序列长度这里运行超时了,我认为这一现象是Java解释器效率较低导致的.因此我又重新用C++写了一遍.

第六章 实验报告 (函数与宏定义)

C程序设计实验报告 实验项目: 6.4.1.1编写由三角形三边求面积的函数 6.4.1.2编写求N的阶层 6.4.1.3求两个整数的最大公约数 6.4.1.4打印输出的指定图形 6.4.2.1模块化程序设计 姓名:杨婷 实验地点:教学楼514教室 实验时间:2019年4月30日 一.实验目的与要求 <1>6.4.1.1编写由三角形三边求面积的函数 调用area()函数求三角形的面积 在求面积函数中运用海伦公式 <2>6.4.1.2编写求N的阶层 定义符号常量 使用长整型变量存放累乘