常见算法(基本查找、二分查找、分块查找冒泡、选择、插入、快速排序和递归算法)

一、常见算法-01-基本、二分、插值和斐波那契查找

1、基本查找/顺序查找

需求1:定义一个方法利用基本查找,查询某个元素是否存在

数据如下:{131,127,147,81,103,23,7,79}

需求2:定义一个方法利用基本查找,查询某个元素在数组中的索引

要求:不需要考虑数组中元素是否重复

需求3:定义一个方法利用基本查找,查询某个元素在数组中的索引

要求:需要考虑数组中元素是否重复

数据如下:{131,127,147,81,103,23,7,79,81}

2、二分查找/折半查找

  • 前提条件:数组中的数据必须是有序的
  • 核心逻辑:每次排除一般的查找范围

练习 

需求:定义一个方法利用二分查找,查询某个元素在数组中的索引

数据如下: {7,23,79,81,103,127,131,147}

 

总结:

3、插值查找(二分查找改进)

 

4、斐波那契查找(二分查找改进)

5、总结:

 

二、常见算法-02-分块,分块查找,哈希查找

1、分块查找 

⭐⭐练习 

分块查找核心思想:块内无序,块间有序实现步骤:1.创建数组blockArr存放每一个块对象的信息2.先查找blockArr确定要查找的数据属于哪一块3.再单独遍历这一块数据即可

2、扩展的分块查找(无规律的数据) 

3、扩展的分块查找(查找的过程中还需要添加数据) 

三、常见算法-03-冒泡排序和选择排序

1、冒泡排序

冒泡排序:相邻两个数据两两比较,小的放前面,大的放后面。

 

2、选择排序

选择排序:从0索引开始,拿着每一个索引商的元素跟后面的元素一次比较,小的放前面,大的放后面,一次类推。 

 

 

四、常见算法-04-插入排序和递归算法

1、插入排序

0索引的元素到N索引的元素看做是有序的,把N+1索引的元素到最后一个当成是无序的。
遍历无序的数据,将遍历到的元素插入有序序列中适当的位置,如遇到相同数据,插在后面。
N的范围:0~最大索引

 

2、递归算法 

递归值得是方法中调用方法本身的现象。

递归算法的作用

  • 把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。

  • 递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算

书写递归的两个核心:

  • 找出口:什么时候不再调用方法。

  • 找规则:如何把大问题变成规模较小的问题

递归的注意点:递归一定要有出口,否则就会出现内存溢出

练习——递归求和

需求:求1~100之间的和 

练习——递归求阶乘

 需求:用递归求5的阶乘,并把结果在控制台输出

5!= 5*4*3*2*1                100!= 100*99*98*97*96....*2*1;

五、常见算法-05-快速排序

练习——快速排序

第一轮:以e索引的数字为基准数,确定基准数在数组中正确的位置。
比基准数小的全部在左边,比基准数大的全部在右边。
后面以此类推。

//结果:1,2,3,4,5,6,7,8,9,10

 总结

六、Arrays 

 

1、Lambda表达式的标准格式

Lambda表达式是JDK8开始后的一中新语法形式。

         ( ) ->{   

                             

          }

  • ()对应着方法的形参
  • ->  固定格式
  • {}  对应着方法的方法体

函数式编程

函数式编程(Functional programming)是一种思想特点。
函数式编程思想,忽略面向对象的复杂语法,强调做什么,而不是谁去做。
而我们要学习的Lambda表达式就是函数式思想的体现。

2、总结:

1、Lambda表达式的基本作用?
                     简化函数式接口的匿名内部类的写法。
2、Lambda表达式有什么使用前提?
                     必须是接口的匿名内部类,接口中只能有一个抽象方法
3、Lambda的好处?
                      Lambda是一个匿名函数
                      我们可以把Lambda表达式理解为是一段
                      可以传递的代码,它可以写出更简洁、更灵活的代码,作为一种更紧
                      凑的代码风格,使Java语言表达能力得到了提升。 

3、Lambda表达式的省略写法

省略核心:可推导,可省略

  • 参数类型可以省略不写。
  • 如果只有一个参数参数类型可以省略,同时()也可以省略。
  • 如果Lambda表达式的方法体只有一行大括号,分号,return可以省略不写,需要同时省略。 

 七、五道算法题

练习1——Lambda表达式简化Comparator接口的匿名形式

定义数组并存储一些字符串,利用Arrays中的sort方法进行排序
要求:     按照字符串的长度进行排序,短的在前面,长的在后面。
                    (暂时不比较字符串里面的内容)

 练习2——按照要求进行排序

定义数组并存储一些女朋友对象,利用Arrays中的sort方法进行排序
要求1:属性有姓名、年龄、身高。
要求2:按照年龄的大小进行排序,年龄一样,按照身高排序,身高一样按照姓名的字母进行排序。
(姓名中不要有中文或特殊字符,会涉及到后面的知识)

创建Text类

或者用

  练习3——不死神兔

有一个很有名的数学逻辑题叫做不死神兔问题,有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第十二个月的兔子对数为多少? 

规律:从第三个数据开始,是前两个数据和                                                                                           (斐波那契数列)                                

 练习4——猴子吃桃子

有一堆桃子,猴子第一天吃了其中的一半,并多吃了一个!以后每天猴子都吃当前剩下来的一半,然后再多吃一个,第10天的时候(还没吃),发现只剩下一个桃子了,请问,最初总共多少个桃子?

练习5——爬楼梯

可爱的小明特别喜欢爬楼梯,他有的时候一次爬一个台阶,有的时候一次爬两个台阶。
如果这个楼梯有20个台阶,小明一共有多少种爬法呢?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/21134.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ C (1152) : 循环赛日程表

文章目录 一、题目描述二、参考代码 一、题目描述 二、参考代码 #include<iostream> #include<vector> #include<cstdlib> using namespace std;void generateSchedule(vector< vector<int> >& table, int numPlayers, int rounds) {// 生…

堆排序-java

这次主要讲了堆排序和堆的基本构造&#xff0c;下一期会详细讲述堆的各种基本操作。 文章目录 前言 一、堆排序 1.题目描述 2.堆 二、算法思路 1.堆的存储 2. 结点下移down 3.结点上移up 4.堆的基本操作 5.堆的初始化 三、代码如下 1.代码如下&#xff1a; 2.读入数据&#xff…

小公司的软件开发IT工具箱

目录 工具链困境 难题的解决 达到的效果 资源要求低 工具箱一览 1、代码管理工具 2、自动化发版&#xff08;测试&#xff09;工具 3、依赖库&#xff08;制品包&#xff09;管理 4、镜像管理 5、授权管理&#xff08;可选&#xff09; 待讨论&#xff1a;为什么不是…

LeetCode17电话号码的字母组合

题目描述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 解析 广度优先遍历或者深度优先遍历两种方式&#xff0c;广度优先…

渗透测试靶机----FirstLeads_1.3

渗透测试靶机----FirstLeads_1.3 启动靶机&#xff0c;扫描ip&#xff0c;平平无奇 可以看出&#xff0c;这里是存在139这个主机的&#xff0c;这就是扫描出来的靶机ip继续探测端口及其他信息 发现这里只开启了80 端口 尝试一些基本目录&#xff0c;发现存在robot.txt文件目录…

集成算法:Bagging模型、AdaBoost模型和Stacking模型

概述 目的&#xff1a;让机器学习效果更好&#xff0c;单个不行&#xff0c;集成多个 集成算法 Bagging&#xff1a;训练多个分类器取平均 f ( x ) 1 / M ∑ m 1 M f m ( x ) f(x)1/M\sum^M_{m1}{f_m(x)} f(x)1/M∑m1M​fm​(x) Boosting&#xff1a;从弱学习器开始加强&am…

插入排序以及希尔排序; 先学会插入,希尔会更简单喔

1.前言 首先肯定是要学会插入排序再学习希尔排序会更简单&#xff0c;因为代码部分有很多相似之处&#xff1b;如果你觉得你很强&#xff0c;可以直接看希尔排序的讲解。哈哈哈&#xff01;&#xff0c;每天进步一点点&#xff0c;和昨天的自己比 2.插入排序 让我们先来看看…

鸿蒙Ability Kit(程序框架服务)【UIAbility组件与UI的数据同步】

UIAbility组件与UI的数据同步 基于当前的应用模型&#xff0c;可以通过以下几种方式来实现UIAbility组件与UI之间的数据同步。 [使用EventHub进行数据通信]&#xff1a;在基类Context中提供了EventHub对象&#xff0c;可以通过发布订阅方式来实现事件的传递。在事件传递前&am…

Rustdesk 自建服务器教程

一、环境 阿里云轻量服务器、debian11 系统 二、服务端搭建 2.1、开放防火墙指定端口 TCP(21115, 21116, 21117, 21118, 21119)UDP(21116) 2.2、安装 rustdesk 服务器文件 在 github 下载页https://github.com/rustdesk/rustdesk-server/releases/&#xff0c;下载 rustde…

【自撰写,国际象棋入门】第1课、棋盘和棋子

第1课 棋盘和棋子 一、国际象棋的棋盘 国际象棋的棋盘为一8乘8的黑、白格相间的棋盘&#xff0c;8条竖线的编号分别为A-H&#xff0c;8条横线的编号分别为1-8&#xff0c;在记谱时用竖线编号横线编号的方式表示棋盘上的格子&#xff0c;例如a1格、h8格等.棋盘上有几条重要的大…

c++程序员为什么要做自己的底层库

五一期间&#xff0c;在家里翻到之前上学时候用的电脑和工作日志&#xff0c;粗略浏览一番&#xff0c;感慨10年岁月蹉跎&#xff0c;仍然没有找到自己技术方向的“道”。遂有感而发&#xff0c;写下此文。 算起来&#xff0c;接触软件开发也有10年时间了&#xff0c;最开始是…

Java——异常

1.什么是异常 将程序执行过程中发生的不正常行为称为异常。 常见的异常有&#xff1a;算数异常&#xff0c;空指针异常&#xff0c;数组越界异常 每一种异常都有对应的类对齐描述 为了对每一种异常进行管理&#xff0c;Java内部实现了一个对异常的体系结构 1. Throwable&#x…

CS2游戏30万挂箱账号被封,饰品市场要变天

Steam游戏平台上CS2的玩家在线人数常年位于第一位&#xff0c;即便偶尔会被爆款游戏挤下来&#xff0c;但一切都是暂时的。饰品交易作为CS2的重要组成部分&#xff0c;早已成为了维系游戏热度的不二法门。可相对应的&#xff0c;各种挂箱子的工作室及个人也孕育而生。 但近来V社…

【Docker学习】docker pull详细说明

docker pull是我们经常用到的一个命令。我们使用一些官方镜像&#xff0c;如MySql、Nginx等都需要用docker pull下载。不过不用的话&#xff0c;也可以。比如使用docker run&#xff0c;要是找不到镜像&#xff0c;会自动下载。 命令&#xff1a; docker image pull 描述&am…

Uniapp写一个简单的商品瀑布流界面+商品详情

最终效果&#xff1a; 整体内容比较简单&#xff0c;参考了一篇瀑布流文章和一篇商品详情文章随便修改整了下&#xff0c;主要是给想做这方便面的新人一个简单逻辑的展示&#xff08;其实我也是第一次写这个emmm&#xff09; 一.组件下载&#xff1a; uni-icon uni-goods-nav…

什么是ACP?

前言 ACP指的是应用程序控制平面&#xff0c;是微服务架构中的一个关键组成部分。它负责管理微服务架构中的各个微服务&#xff0c;包括服务发现和注册、负载均衡、服务路由、熔断和降级、配置管理等方面的功能。 A&#xff1a;可用性 所有请求都有响应。C&#xff1a;强一致…

[DDR5 Jedec 3-4] 模式寄存器 Mode Register MRR/MRW

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解DDR》 1. 概念 模式寄存器用于定义各种操作模式。在初始化过程中,可以通过重新执行MRS命令来更改模式寄存器的内容。即使用户只想修改模式寄存器变量的一个子集,在发出MRS命令时也必须编程所有变量。 只有当所有ban…

现实残酷!存款百万只是少数人的游戏,普通家庭能存多少?

近期&#xff0c;网络上掀起了一股关于普通家庭终身存款上限的热烈讨论。一位网友通过简单的算术方式提出了一个假设&#xff1a;如果一对夫妻每年收入15万&#xff0c;并成功将6万存入银行&#xff0c;那么从25岁步入社会至60岁退休&#xff0c;他们理论上能积累到210万的存款…

Go语言之GORM框架(四)——预加载,关联标签与多态关联,自定义数据类型与事务(完结篇)

前言 本来是想着写多表关系的&#xff0c;不过写了一半发现重复的部分太多了&#xff0c;想了想与其做一些重复性工作&#xff0c;不如把一些当时觉得抽象的东西记录一下&#xff0c;就当用一篇杂记完成专栏的最后一篇文章吧。 预加载 简单示例 预加载主要用于在多表关系中…

谷歌浏览器的平替,内置开挂神器,我已爱不释手!

油猴浏览器正式版是一款基于谷歌Chromium源码开发的浏览器&#xff0c;它集成了集成了强大的油猴扩展&#xff08;Tampermonkey&#xff09;&#xff0c;使得用户可以轻松安装各种脚本&#xff0c;从而增强网页浏览体验。提供了一个更加个性化和高效的浏览体验。 油猴扩展&…