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

  1. 题目:二分法查找
  2. 问题描述:用二分法查找x,找到时输出x的下标和比较次数;找不到时输出-1和比较次数。
  3. 算法语言描述:

输入数组和要查找的数x

  1. 算法描述:将一个数组分为两半,设置一个中间量a[mid]与要查找的数x比较,设置一个变量表示比较次数cnt,每次比较后cnt+1。若相等则说明中间值是要找的数,输出中间值和比较次数。若a[mid]小于x,则在数组右边继续查找,若a[mid]大于x,则在数组左边继续查找。找不到则输出-1和查找次数。
  2. 代码实现:

#include <iostream>

using namespace std;

int a[1009];

int main(){

int n;cin>>n;

for(int i=0;i<n;i++){

cin>>a[i];

}

int x;cin>>x;

int cnt=0;

int l,r,mid;l=0,r=n-1;

while(l<=r){

mid=(l+r)/2;

cnt++;

if(a[mid]==x)break;

else if(a[mid]<x){

l=mid+1;

}

else r=mid-1;

}

if(a[mid]==x){

cout<<mid<<endl;

cout<<cnt<<endl;

}

else cout<<-1<<endl<<cnt<<endl;

return 0;

}

  1. 时间复杂度和空间复杂度;

用了二分法搜索算法,寻找x的时间复杂度为O(logn);空间复杂度为数组空间大小,是一个常数,与变量n的取值无关。所以空间复杂度为O(1)

  1. 心得:打代码正确的思路很重要,先有思路再一步一步用代码把正确的思路实现出来就很快了。还有要注意一下代码的规范性。

原文地址:https://www.cnblogs.com/Z20171003329/p/9824221.html

时间: 2024-09-29 19:38:20

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

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

实践报告任选一题进行分析. 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的算法,但因为对算法的不熟悉,我们小组在实践课

算法第二章实践

第一题:输入n值(1<=n<=1000).n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数.若x不存在,输出-1和比较次数. 用二分搜索法,将若干个元素分成基本相同的两部分,x与a[n/2]比较,每次搜索数组的大小减一半.算法最坏情况下,时间复杂度为logn,空间复杂度是常数O(1).算法大致为:若x=a[mid],则返回mid,若x<[mid],则right=mid-1,x>[mid]则left=mid+1 心得体会:该题的难

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 ?

2017-2018-2 20165228 实验三《敏捷开发与XP实践》实验报告

2017-2018-2 20165228 实验三<敏捷开发与XP实践>实验报告 相关知识点 (一)敏捷开发与XP 通过 XP准则来表达: 沟通 :XP认为项目成员之间的沟通是项目成功的关键,并把沟通看作项目中间协调与合作的主要推动因素. 简单 :XP假定未来不能可靠地预测,在现在考虑它从经济上是不明智的,所以不应该过多考虑未来的问题而是应该集中力量解决燃眉之急. 反馈 :XP认为系统本身及其代码是报告系统开发进度和状态的可靠依据.系统开发状态的反馈可以作为一种确定系统开发进度和决定系统下一步开

2017-2018-2 20165306 实验三《敏捷开发与XP实践》实验报告

实验三<敏捷开发与XP实践>实验报告 实验报告封面 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一) 敏捷开发与XP实践-1 实验要求: 参考 代码规范 安装alibaba 插件,解决代码中的规范问题.在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能.提交截图,加上自己学号水印. public class CodeStandard { public static void main(S

2018-2019-2-20175327 蜂凯南 实验三 《敏捷开发与XP实践》实验报告

2018-2019-2-20175327 蜂凯南 实验三 <敏捷开发与XP实践>实验报告 实验三 Java面向对象程序设计 一.实验内容: 安装alibaba 插件,解决代码中的规范问题.在IDEA中使用工具(Code->Reformate Code)格式化代码,研究一下Code菜单,比较功能. 在码云上把自己的学习搭档加入自己的项目中,下载搭档实验二的Complex代码,加入不少于三个JUnit单元测试用例,测试并上传代码至码云 下载搭档的代码,完成重构内容的练习. 结合重构,git,

2018-2019-2 20175320实验三《敏捷开发与XP实践》实验报告

2018-2019-2 20175320实验三<敏捷开发与XP实践>实验报告 一.实验步骤及内容 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软件工程包括下列领域:软件需求分析.软件设计.软件构建.软件测试和软件维护.软件工程通常是开发流程与开发工具的组合,而敏捷和极限编程就是开发方法的一部分. 敏捷开发 敏捷开发是一种以人为核心.迭代.循序渐进的开发方法. 极限编程(XP) 极限编程是一种全新而快捷的软件开发方法,其包括沟通.简单.反馈.勇气这几项准则:编码

20175325 《JAVA程序设计》实验三《敏捷开发与XP实践》实验报告

20175325 <JAVA程序设计>实验三<敏捷开发与XP实践>实验报告 一.实验报告封面 课程:Java程序设计 班级:1753班 姓名:石淦铭 学号:20175325 成绩: 指导教师:娄嘉鹏 实验日期:2019年5月2日 实验时间:13:45 - 17:25 实验序号:实验三 实验名称:敏捷开发与XP实践 实验内容: 1.XP基础 2.XP核心实践 3.相关工具 二.实验内容及步骤: (一).实验一 1.题目: 实验三 敏捷开发与XP实践 http://www.cnblog