算法第二章上机实验报告
1.实验题目
7-2 改写二分搜索算法
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的值
输入样例:
在这里给出一组输入。例如:
6 5
2 4 6 8 10 12
输出样例:
在这里给出相应的输出。例如:
1 2
3.算法描述
1)按照题目要求输入,第一行是n值和x值; 第二行是n个不相同的整数组成的非降序序列,每个整数之间以空格分隔;
2)用if语句:若x小于全部数值,则输出:-1 0,else if语句:若x大于全部数值,则输出:n-1的值 n的值;
3)其他情况,用else语句:调用int Search(int x,int a[],int left,int right)搜查小于x的最大元素位置i和大于x的最小元素位置j;首先先折半查找,不断调用int Search(int x,int a[],int left,int right),直至a[mid-1]<x&&x<a[mid]的条件结束调用,返回小于x的最大元素位置i和大于x的最小元素位置j。
4.算法时间及空间复杂度分析
1)时间复杂度:当判断是否需要折半查找时,T(n)=O(1);在没达到边界条件时,在不断调用的情况下,进行折半查找T(n)=O(logn)
2)空间复杂度:每次递归都要存储返回信息,所以空间复杂度S(n)=O(logn)
5.心得体会
1)首先二分法,边界条件是很重要的,在二分算法中,第一句就要写边界条件的判断
2)在小组讨论中,我把若x小于全部数值和若x大于全部数值写进了二分查找的函数中,后面写到主函数后,思路就清晰了,所以每一个函数的功能是什么需明确,其他额外的语句不要写进去
原文地址:https://www.cnblogs.com/suwenwen747/p/11568938.html
- java arrays类学习
- 如何使用带有Dropout的LSTM网络进行时间序列预测
- 生信人写程序2. Editplus添加Perl, Shell, R, markdown模板和语法高亮
- Rfam 12.0+本地使用 (最新版教程)
- 宝马汽车安全漏洞详解:古有伯乐识良驹,今有黑客擒宝马
- string.length()与-1比较为什么会出现匪夷所思的结果
- css模块化及CSS Modules使用详解
- 使用OpenCV,Python和模板匹配来播放“Waldo在哪里?”
- C++ 字符串分割
- 算法笔记之排序
- java中String类学习
- React Native之ListView实现九宫格效果
- 迷宫问题(bfs的应用)
- 流量都去哪儿了 —— 三板斧搞定Android网络流量测试
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring AOP异常:Error creating bean with name ‘org.springframework.aop.aspectj.
- Tomcat7 Redis Session 共享
- CodeIgniter (CI) 框架学习 -- load_class
- Laravel框架学习 -- php artisan down/up
- Spring中基于注解@AspectJ的AOP实现
- python提高--running-python-code-contained-in-a-strin
- linux shell 监控脚本 及 邮件发送
- Laravel框架学习 -- 安装
- Redis 键管理与小功能
- redis 数据持久化
- 不蒜子 | 给网站、博客文章添加阅读次数统计,我用两行代码 搞定计数
- redis 主从复制
- Spring 当一个接口多个实现时,怎么注入
- redis主从同步,显示master_link_status:down的解决思路
- CentOS自带Python被删 && YUM报错修复