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.mzph.cn/news/129949.shtml

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

相关文章

《python深度学习》笔记(二十):神经网络的解释方法之CAM、Grad-CAM、Grad-CAM++、LayerCAM

原理优点缺点GAP将多维特征映射降维为一个固定长度的特征向量①减少了模型的参数量&#xff1b;②保留更多的空间位置信息&#xff1b;③可并行计算&#xff0c;计算效率高&#xff1b;④具有一定程度的不变性①可能导致信息的损失&#xff1b;②忽略不同尺度的空间信息CAM利用…

Servlet对象生命周期

Servlet 生命周期包括加载与实例化、初始化、服务请求、销毁等阶段。 ervlet 的生命周期包括以下阶段&#xff1a; 加载与实例化&#xff1a;当容器启动或者第一次请求到达时&#xff0c;Servlet 容器加载 Servlet 类并创建 Servlet 实例。 初始化&#xff1a;在 Servlet 实例…

网络安全演练(一句话木马)

在享受互联网带来的便利的同时&#xff0c;也充满了各种网络安全风险&#xff0c;本文通过搭建实验环境&#xff0c;演示一句话木马获取主机权限。 演示环境 服务端&#xff1a;安装LAMP环境&#xff0c;部署web网站&#xff0c;上传一句话木马文件 客户端&#xff1a;安装A…

qt6-QPushButton无法显示为类

问题 在编写QT程序时&#xff0c;不同颜色表示不同的含义。在设计基本的界面&#xff0c;需要使用QRadioButton时&#xff0c;相应的字符为紫色&#xff0c;紫色为类名。这篇简单说明了下&#xff0c;也可以鼠标点击页面&#xff0c;可以出现提示。 但是上面图片中显示&#…

视频转序列图片:掌握技巧,轻松转换

随着社交媒体和视频平台的日益普及&#xff0c;视频已成为我们生活中不可或缺的一部分。有时&#xff0c;我们需要将视频转换为图片序列&#xff0c;例如制作GIF动图或提取视频中的特定画面。现在一起来看云炫AI智剪如何将视频转换为序列图片&#xff0c;并轻松实现转换。 操作…

OpenShift - 利用容器的特权配置实现对OpenShift攻击

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在 OpenShift 4.14 的环境中验证 本文是《容器安全 - 利用容器的特权配置实现对Kubernetes攻击》的后续篇&#xff0c;来介绍 在 OpenShift 环境中的容器特权配置和攻击过程和 Kubernetes 环境的差异。 文…

框架安全-CVE 复现Apache ShiroApache Solr漏洞复现

文章目录 服务攻防-框架安全&CVE 复现&Apache Shiro&Apache Solr漏洞复现中间件列表常见开发框架Apache Shiro-组件框架安全暴露的安全问题漏洞复现Apache Shiro认证绕过漏洞&#xff08;CVE-2020-1957&#xff09;CVE-2020-11989验证绕过漏洞CVE_2016_4437 Shiro-…

城市内涝解决方案:实时监测,提前预警,让城市更安全

城市内涝积水问题是指城市地区在短时间内遭遇强降雨后&#xff0c;地面积水过多&#xff0c;导致城市交通堵塞、居民生活不便、财产损失等问题。近年来&#xff0c;随着全球气候变化和城市化进程的加速&#xff0c;城市内涝积水问题越来越突出&#xff0c;成为城市发展中的一大…

基于设深度学习的人脸性别年龄识别系统 计算机竞赛

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习机器视觉的…

软件测试/测试开发丨ChatGPT能否成为PPT最佳伴侣

点此获取更多相关资料 简介 PPT 已经渗透到我们的日常工作中&#xff0c;无论是工作汇报、商务报告、学术演讲、培训材料都常常要求编写一个正式的 PPT&#xff0c;协助完成一次汇报或一次演讲。PPT相比于传统文本的就是有布局、图片、动画效果等&#xff0c;可以给到观众更好…

【leetcode】26. 删除有序数组中的重复项(图解)

目录 1. 思路&#xff08;图解&#xff09;2. 代码 题目链接&#xff1a; leetcode 26. 删除有序数组中的重复项 题目描述&#xff1a; 注意返回的是去重后的数组长度&#xff0c;但是输出的是去重后的数组元素。 1. 思路&#xff08;图解&#xff09; 思路&#xff1a;快慢…

在maven官网中如何下载低版本的maven

链接&#xff1a;https://archive.apache.org/dist/maven/maven-3/

快速了解相似检索方法

一、相似检索方法总体分析 相似检索方法是一种用于从大量数据中找到与查询数据相似的数据项的技术。这种方法通常用于信息检索、推荐系统、图像处理、自然语言处理等领域。相似检索主要方法可以总体分为以下几类&#xff1a; 基于距离度量的方法&#xff1a; 余弦相似度&…

Postman接口测试工具,提高SpringBoot开发效率

文章目录 &#x1f33a;工具—postman⭐作用&#x1f3f3;️‍&#x1f308;安装&#x1f388;创建工作空间 &#x1f384;简单参数⭐原始方式&#x1f388;我们建立springboot项目&#xff0c;输入下面的代码&#x1f388;运行 ⭐SpringBoot方式 &#x1f384;实体参数&#x…

正点原子嵌入式linux驱动开发——Linux 音频驱动

音频是最常用到的功能&#xff0c;音频也是linux和安卓的重点应用场合。STM32MP1带有SAI接口&#xff0c;正点原子的STM32MP1开发板通过此接口外接了一个CS42L51音频DAC芯片&#xff0c;本章就来学习一下如何使能CS42L51驱动&#xff0c;并且CS42L51通过芯片来完成音乐播放与录…

Day39 QTableWidget类的使用

1.简介 介绍QtableWidget各种属性的用法&#xff0c;以及常用的一些信号&#xff0c;最后利用这些特性&#xff0c;制作一个用于下发设备运行参数的表格。该表格可以实现折叠和取消折叠&#xff0c;在源代码中用了事件过滤器实现&#xff0c;也可以用自带的click信号。显示了图…

“第五十九天”

这是昨天那道题&#xff0c;这个后面自己的处理思路还是差了点&#xff0c;这道题关键感觉就是对进位的处理的&#xff0c;由于进位的存在&#xff0c;所以处理数据的时候只能从最低位开始&#xff0c;我一开始是从高位处理的&#xff0c;而且后面越来越迷&#xff0c;这个点一…

自家开发VS第三方美颜SDK:技术和资源的比较

开发直播平台时&#xff0c;开发人员面临一个关键决策&#xff1a;是选择使用第三方美颜SDK&#xff0c;还是自家开发美颜算法&#xff1f;本文将深入探讨这两种方法的技术和资源方面的比较&#xff0c;帮助开发者更好地决定哪种途径最适合他们的应用。 一、第三方美颜SDK&am…

智能电表和互感器一起安装有什么效果?

智能电表和互感器的普及&#xff0c;为用电管理提供了更为精确和便捷的方式。那么&#xff0c;当智能电表和互感器一起安装时&#xff0c;会产生怎样的"化学反应"呢&#xff1f;下面&#xff0c;小编就来为大家详细的讲解下智能电表和互感器一起安装的作用吧&#xf…

lua-web-utils库

lua--导入所需的库local web_utilsrequire("lua-web-utils")--定义要下载的URLlocal url"https://jshk.com.cn/"--定义代理服务器的主机名和端口号local proxy_port8000--使用web_utils的download函数下载URLlocal file_pathweb_utils.download(url,proxy_…