java数据机构.冒泡排序,选择排序 插入排序 递归算法,递归求阶乘,快速排序

排序算法

  • 冒泡排序
  • 选择排序
  • 插入排序
  • 递归算法
    • 递归求1~100的和
    • 递归求阶乘
  • 快速排序
  • 总结

冒泡排序

相邻两个元素比较,大的放右边,小的放左边
第一轮循环结束最大值已经找到,在数组最右边(归为算法)
第二轮在剩余的元素比较找到次大值,第二轮可以少循环一次
如果有n个数据,总共我们只要执行n-1论代码就可以了

   public static void main(String[] args) {//冒泡排序'int arr[]={2,4,5,3,1};//利用冒泡索引将他变成12345//第一轮结束后最大值在最右边for (int i = 0; i < arr.length-1-0; i++) {//这里是length-1的原因是因为比较第四个元素的时候 4跟5比较  5最后一个就不需要比较了if(arr[i]>arr[i+1]){int temp=arr[i];arr[i]=arr[i+1];arr[i+1]=temp;}}//遍历数组for (int i = 0; i < arr.length; i++) {// System.out.print(arr[i]+ " ");//2 4 3 1 5}//第二轮for (int i = 0; i < arr.length-1-1; i++) {//这里是length-1的原因是因为比较第四个元素的时候 4跟5比较  5最后一个就不需要比较了if(arr[i]>arr[i+1]){int temp=arr[i];arr[i]=arr[i+1];arr[i+1]=temp;}}//遍历数组for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+ " ");//2 3 1 4 5}//第三轮....//第四...}

以上代码比较冗余
改进思路:采用嵌套循环的思路.外循环表示要执行的轮数也就是length-1
{2,4,5,3,1}比如这个要执行的轮数是0 1 2 3 . 4轮即可
内循环是每轮内执行的代码根据以上代码得出是length-1-i. i是0 1 2 3 4依次
内循环第一次0索引执行每次的比较交换代码得到2 4 3 1 5
内循环

    public static void main(String[] args) {//冒泡排序'int arr[]={2,1,5,4,3};//利用冒泡索引将他变成12345//第一轮结束后最大值在最右边for (int i = 0; i < arr.length-1; i++) {for (int j = 0; j < arr.length-1-i; j++) {//这里是length-1的原因是因为比较第四个元素的时候 4跟5比较  5最后一个就不需要比较了//内循环:每一轮如何比较数据并找到最大值//-1是防止月结//-i是提高效率 每一轮执行的次数应该比上一轮少一次if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}printarr(arr);}

选择排序

核心思想 一轮比较确定一个最小的数据(归为),他就排在第一个
第二轮就直接从1索引开始找第二小的
拿着索引1的跟后面所有的比较一遍 遇见小的就交换

    public static void main(String[] args) {//选择排序int arr[]={2,4,5,3,1};//第一轮//int i = 0-1因为自己没有必要跟自己比较for (int i = 0+1; i < arr.length; i++) {if (arr[0]>arr[i]){int temp=arr[0];arr[0]=arr[i];arr[i]=temp;}}//printarr(arr);//1 4 5 3 2//第二轮//int i = 0-1因为自己没有必要跟自己比较for (int i = 0+2; i < arr.length; i++) {if (arr[1]>arr[i]){int temp=arr[1];arr[1]=arr[i];arr[i]=temp;}}//printarr(arr);//1 2 5 4 3//第三轮//int i = 0-1因为自己没有必要跟自己比较for (int i = 0+3; i < arr.length; i++) {if (arr[2]>arr[i]){int temp=arr[2];arr[2]=arr[i];arr[i]=temp;}}printarr(arr);//1 2 3 5 4 }

以下改进

    public static void main(String[] args) {//选择排序int arr[]={2,4,5,3,1};//外循环 表示我拿着哪个索引上的值跟后面的比较//length-1是因为最后一个索引不需要跟自己比较for (int i = 0; i < arr.length-1; i++) {for (int j =i+1 ; j < arr.length; j++) {//内循环是每一轮我要做什么事情//内循环表示拿着i跟i后面的数据交换 .j相当于i后面的数据if(arr[i]>arr[j]){int temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}}printarr(arr);}

插入排序

插入排序思想:将前面的索引看成有序的(前面的几个取决于有序的有几个),后买你的看成无序的. 然后遍历无序,将遍历的到的元素插入有序序列中.如遇到相同数据,插在后面

 public static void main(String[] args) {int arr[]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};//找到无序数组从哪里开始int startIndex=-1;//用-1是因为-1是无效的相当于定义为0;for (int i = 0; i < arr.length; i++) {if(arr[i]>arr[i+1]){//这个相当于找到了前面有序的索引startIndex=i+1;//这个i相当于有序序列的最后一个索引 加一是无序序列的起始索引break;}}for (int i = startIndex; i < arr.length; i++) {//相当于遍历无序索引//遍历无序  得到元素与有序交换int j=i;//记录要插入数据的索引while(j>0&&arr[j]<arr[j-1]){//j当前元素.j-1前一个元素.  arr[j]可以理解为38 j-1就是44.然后交换 交换完后j--  j还是38  然后38和3判断int temp=arr[j];arr[j]=arr[j-1];arr[j-1]=temp;j--;//表示我是与前面的数据判断的}}printarr(arr);//2 3 4 5 15 19 26 27 36 38 44 46 47 48 50 }

递归算法

就是方法自己调用自己

在这里插入图片描述

递归要写出口(就是调用自己到什么时候不调用自己了)否则就会跟上面一样导致栈溢出

递归求1~100的和

   public static void main(String[] args) {//求1到100的和 用递归思想//大问题拆成小问题//1~100之间的和=100+(1~99之间的和)//1~99之间的和=99+(1~98之间的和)//..//1~2之间的和=2+(1~1之间的和)//1~1之间的和=1;这个就是出口//找出口System.out.println(getSum(100));//5050}private static int getSum(int number) {if(number==1){return 1;}//出口return number+getSum(number-1);}}

递归求阶乘

public class jiecheng {public static void main(String[] args) {//5的阶乘就是5!   5×4×3×2×1//找借口//找规律//大问题化小问题//5!  就是5×4!//4!  就是4×3!//...//1! 就是1(出口)System.out.println(getNumber(5));}private static int getNumber(int number) {if(number==1){return 1;}return number*getNumber(number-1);}
}

原理内存图
在这里插入图片描述

快速排序

在这里插入图片描述

在这里插入图片描述

  //快速排序的思想是:拿到一组数据  第一个作为基准数.//从头开始往后找找出比基准数大的.从尾部开始往前找  找比基准数小的//找到了直接交换数据 找不到继续往前找start++  end--.public static void main(String[] args) {int arr[]={6,1,2,7,9,3,4,5,10,8};//第一一个方法 传入数组 头部和尾部quicksort(arr,0,arr.length-1);for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}}private static void quicksort(int arr[], int i, int j){int start=i;int end=j;if(start>end){//起始索引跑到结束索引后面了return;//这是递归出口}//传入基准数int basicNumber=arr[i];//利用循环找到要交换的数字while(start!=end){//利用end从后往前找 找到比基准数小的while(true){if(end<=start||arr[end]<basicNumber){break;}end--;}//利用start从前往后找 找到比基准数da的while(true){if(end<=start||arr[start]>basicNumber){break;}start++;}//把start和end指向的元素进行交换int temp=arr[start];arr[start]=arr[end];arr[end]=temp;}//把基准数跟start或者end交换int temp=arr[i];arr[i]=arr[start];arr[start]=temp;//3 1 2 5 4 6 9 7 10 8//这是第一轮结束后的结果//后面的直接用递归调用//这里的i相当于起始索引//start-1相当于 6前面的.  因为前面start跟i进行了交换quicksort(arr,i,start-1);//这是6左边quicksort(arr,start+1,j);//这是6的右边start+1相当于9}

总结

在这里插入图片描述

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

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

相关文章

基于联合表示学习、用户聚类和模型自适应的个性化联合推荐

[Personalized Federated Recommendation via Joint Representation Learning, User Clustering, and Model Adaptation] (https://dl.acm.org/doi/abs/10.1145/3511808.3557668) CIKM2022(CCF-B) 论文精读 文章主要创新点(消融实验分析的三个点)&#xff1a; 联合表示学习 …

【C++】set和multiset

文章目录 关联式容器键值对一、set介绍二、set的使用multiset 关联式容器 STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、forward_list(C11)等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存储的是元…

社交善行:TikTok如何引领慈善浪潮

在当今数字时代&#xff0c;社交媒体平台已成为人们互动、分享和传播信息的主要渠道。然而&#xff0c;这些平台不仅仅是用来社交和娱乐的工具&#xff0c;它们还可以成为慈善事业的有力支持者。 其中&#xff0c;TikTok以其独特的社交性质和广泛的用户群体&#xff0c;成为引…

jsoncpp fatal error C1083: 无法打开编译器生成的文件

使用jsoncpp库的时候&#xff0c;在Debug模式下正常&#xff0c;但是release却报错&#xff0c;开始以为是开发项目设置问题&#xff0c;于是网络搜索&#xff0c;发现是jsoncpp的编译选项问题。 修改生成静态库文件的工程的属性&#xff1a;路径为&#xff1a;菜单&#xff0…

react-hook-form。 useFieldArray Controller 必填,报错自动获取较多疑问记录

背景 动态多个数据Controller包裹时候&#xff0c;原生html标签input可以add时候自动获取焦点&#xff0c;聚焦到最近不符合要求的元素上面 matiral的TextField同样可以可是x-date-pickers/DatePicker不可以❌ 是什么原因呢&#xff0c;内部提供foucs&#xff1f;&#xff1f;属…

数据出境安全评估:重要性和实施策略

数据出境安全评估是确保数据安全和合规的重要环节。随着全球化的加速和信息技术的快速发展&#xff0c;企业和个人需要处理大量的数据&#xff0c;其中许多数据涉及个人隐私和企业机密。因此&#xff0c;数据出境安全评估对于保护数据安全和隐私权至关重要。 一、数据出境安全评…

列式数据库ClickHouse,大宽表聚合、报表一下全搞定

一、前言 现在数据库的种类也是特别的多&#xff0c;大致的类别包括&#xff1a; 关系型数据库&#xff08; MySQL、Oracle、PostgreSQL&#xff09;非关系型数据库&#xff08;Redis、MongoDB、Cassandra、Neo4j&#xff09;全文搜索引擎和分布式文档存储系统&#xff08;El…

kafka入门教程,介绍全面

1、官网下载最新版本的kafka&#xff0c;里面已经集成zookeeper。直接解压到D盘 2、配置文件修改&#xff0c;config目录下面的zookeeper.properties. 设置zookeeper数据目录 dataDirD:/kafka_2.12-3.6.0/tmp/zookeeper 3、修改kafka的配置文件server.properties. 主要修…

了解千兆光模块和万兆光模块的优势与劣势

光模块是现代通信网络中核心的传输设备之一。千兆光模块和万兆光模块作为其中的重要代表&#xff0c;广泛应用于数据中心和云计算等领域。它们采用光纤作为传输介质&#xff0c;具有高速、高带宽等优势。本文将从千兆光模块和万兆光模块的性能和应用范围入手&#xff0c;详述了…

LLM - 训练与推理过程中的 GPU 算力评估

目录 一.引言 二.FLOPs 和 TFLOPs ◆ FLOPs [Floating point Opearation Per Second] ◆ TFLOPs [Tera Floating point Opearation Per Second] 三.训练阶段的 GPU 消耗 ◆ 影响训练的因素 ◆ GPT-3 训练统计 ◆ 自定义训练 GPU 评估 四.推理阶段的 GPU 消耗 ◆ 影响…

[推荐]SpringBoot,邮件发送附件含Excel文件(含源码)。

在阅读本文前&#xff0c;可以先阅读我的上一篇文章&#xff1a; SpringBoot&#xff0c;使用JavaMailSender发送邮件(含源码)。 &#xff0c;本文使用的代码案例涉及到的 jar包、application.properties配置与它相同。 先看一下效果。 图一 图二 在下方代码案例中&#xff0c;…

速卖通卖家如何通过自己搭建测评补单系统,提高产品权重和排名?

速卖通卖家如何给店铺增加权重和排名&#xff1f; 在竞争激烈的速卖通平台上&#xff0c;为自己的店铺增加权重是吸引更多买家和提升销售的关键。店铺的权重决定着在搜索排名、推荐位和广告展示方面的优先级。今天珑哥为您介绍一些有效的策略&#xff0c;帮助您提升速卖通店铺…

Apache Shiro 越权访问漏洞 CVE-2020-1957 漏洞复现

一、漏洞描述 Apache Shiro 是一款开源安全框架&#xff0c;提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用&#xff0c;同时也能提供健壮的安全性。 CVE-2020-1957&#xff0c;Spring Boot中使用 Apache Shiro 进行身份验证、权限控制时&#xff0c;可以精心构造…

五款好用的数据备份软件推荐!

在当今信息时代&#xff0c;数据备份的重要性不言而喻。选择一款可靠的、功能强大的免费备份软件&#xff0c;不仅能确保数据的安全存储&#xff0c;还能为用户节省宝贵的时间和精力。针对这一需求&#xff0c;精心挑选了几款备受推荐的免费数据备份软件&#xff0c;它们不仅操…

污水一体处理设备工艺有哪些

污水一体处理设备工艺主要包括以下几种&#xff1a; AO工艺&#xff1a;AO工艺是增加好氧池缺氧池形成硝化-反硝化系统&#xff0c;处理污水中氮含量效率提升。SBR工艺&#xff1a;SBR工艺是按间歇曝气方式运行的活性污泥处理技术&#xff0c;厌氧、好氧、缺氧处于交替状态&am…

ElasticSearch快速入门实战

全文检索 数据分类&#xff1a; 1、结构化数据&#xff1a; 固定格式&#xff0c;有限长度 比如mysql存的数据 2、非结构化数据&#xff1a;不定长&#xff0c;无固定格式 比如邮件&#xff0c;word文档&#xff0c;日志 3、半结构化数据&#xff1a; 前两者结合 比如xml&am…

第一个QT程序

新建工程&#xff1a; 1. 点击“New Project” 2. 选择“Qt Widgets Application” 3. 工程名和路径 4. 构建系统选择 5. Details 一些细节 6. 选择Kits 7. 完成工程创建 点完成按钮 8. 运行下看 9. 一些示例代码 //main.cpp #include "mywidget.h"#include <Q…

编程助手DevChat:让开发更轻松

#AI编程助手哪家好&#xff1f;DevChat“真”好用 # 目录 前言一、安装Vscode1、下载链接2、安装 二、注册DevChat1、打开注册页2、验证成功完成邮箱绑定3、绑定微信可获得8元 三、安装插件四、配置Access Key1、获取Access Key2、设置Access Key①、点击左下角管理&#xff08…

稳定扩散的高分辨率图像合成

推荐稳定扩散AI自动纹理工具&#xff1a;DreamTexture.js自动纹理化开发包 1、稳定扩散介绍 通过将图像形成过程分解为去噪自动编码器的顺序应用&#xff0c;扩散模型 &#xff08;DM&#xff09; 在图像数据及其他数据上实现了最先进的合成结果。此外&#xff0c;它们的配方…

如何在《阴阳师》游戏中使用Socks5搭建工具

题目&#xff1a;如何在《阴阳师》游戏中使用S5搭建工具S5一键搭建脚本进行游戏战队组建&#xff1f; 引言&#xff1a; 游戏加速和游戏战队组建已经成为《阴阳师》玩家们非常关心的话题。在这篇文章中&#xff0c;我们将向您展示如何在《阴阳师》游戏中使用S5搭建工具S5一键搭…