Java常见排序

1、冒泡排序(从小到大排序)

相邻的元素两两比较,小的放左边,大的放右边

第一轮比较完毕之后,最大值就已经确定了,第二轮比第一轮少循环一次,后面以此类推

如果数据中有n个数据,我们只需要比较n-1轮的代码即可

/*** 冒泡排序* *///定义数组int[] arr={2,4,5,3,1};//外循环,表示我要执行多消耗轮,如果 有n个数据,就执行n-1轮for (int i = 0; i < arr.length-1; i++) {//内循环:表示每一轮中,我如何比较并找到当前的最大值//-1:为了预防索引越界//-i:提高效率,每一轮执行的次数比上一轮少一次for (int j = 0; j < arr.length-1-i; j++) {if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}System.out.println(Arrays.toString(arr));

2、选择排序(从小到大排序)

从0索引开始,跟后面的元素一一比较

小的放前面,大的放后面

第一轮结束之后,最小的数据已经确定

第二轮循环从1索引开始以此类推

 //选择排序int[] arr={3,5,1,4,2};//外循环:几轮//i,表示在这轮中,我要拿着哪个索引上的数据跟后面的数据一一对比for (int i = 0; i < arr.length; i++) {//内循环:每一轮我要干什么//拿着i跟i后面的数据进行比较for (int j = i+1; j < arr.length; j++) {if(arr[i]>arr[j]){int temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}}

3、插入排序

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

n的范围:0~最大索引

 //插入排序int[] arr={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};//1.找到无序的那一组数据是从哪个索引开始int start=-1;for (int i = 0; i < arr.length; i++) {if(arr[i]>arr[i+1]){//表示有序的那一组数据,到哪里结束start=i+1;break;}}//遍历从start开始到最后一个元素,依次得到无序的那一组数据的每一个元素for (int i = start; i < arr.length; i++) {//记录当前要插入数据的索引int j=i;while(j>0&&arr[j]<arr[j-1]){//交换位置int temp=arr[j];arr[j]=arr[j-1];arr[j-1]=temp;j--;}}System.out.println(Arrays.toString(arr));

4、递归算法

递归是指方法中调用方法本身的现象,把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解

递归一定要有出口,否则就会出现内存溢出。

例子:求1-100之间的和

public class Test04 {public static void main(String[] args) {//递归算法 1-100之间的和//拆问题//1-100的和=100+(1-99之间的和)//1-99的和=99+(1-98之间的和)//1-98的和=98+(1-97之间的和)//...//1-2的和=2+(1-1之间的和)//1-1的和=1(递归的出口)System.out.println(getSum(100));}public static int getSum(int num){if(num==1){return 1;}return num+getSum(num-1);}
}

5、快速排序

第一轮,把0索引的数字作为基准数,确定基准数在数组中的正确位置,比基准数小的全部在左边,比基准数大的全部在右边

public class Test06 {public static void main(String[] args) {//快速排序int[] arr={6,1,2,7,9,3,4,5,10,8};quickSort(arr,0,arr.length-1);System.out.println(Arrays.toString(arr));}/**** 参数1:要排序的数组* 参数2:要排序 数组的起始位置* 参数3:要排序数组的结束索引*/public static  void quickSort(int[] arr,int i,int j){//定义两个变量记录要查找的范围int start=i;int end=j;if(start>end){//递归出口return;}//记录基准数int baseNum=arr[i];//利用循环找到要交换的数据while (start!=end){//利用end,从后往前找,找到比基准数要小的数据while (true){if(end<=start||arr[end]<baseNum){break;}end--;}//利用start,从前往后找,找到比基准数要大的数据while (true){if(end<=start||arr[start]>baseNum){break;}start++;}//把end和start指向的元素进行交换int temp=arr[start];arr[start]=arr[end];arr[end]=temp;}//当start和end指向了同一个元素的时候,那么上面的循环就会结束//表示已经找到了基准数在数组中应存入的位置//基准数归位int temp=arr[i];arr[i]=arr[start];arr[start]=temp;//确定6左边的范围,重复刚刚的操作quickSort(arr,i,start-1);quickSort(arr,start+1,j);}
}

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

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

相关文章

Pytorch 计算深度模型的大小

计算模型大小的方法 卷积 时间复杂度 与 空间复杂度 的计算方式&#xff1a; C 通道的个数&#xff0c;K卷积核大小&#xff0c;M特征图大小&#xff0c;C_l-1是输入通道的个数&#xff0c;C_l是输出通道的个数 1 模型大小 MB 计算模型的大小的原理就是计算保存模型所需要…

每天学习一个Linux命令之grpck

每天学习一个Linux命令之grpck 简介 在Linux系统中&#xff0c;grpck是一个非常有用的命令&#xff0c;它的主要功能是检查和修复组文件&#xff08;/etc/group&#xff09;的完整性和一致性。本篇博客将详细介绍grpck命令及其所有可用选项的用法。 命令语法 grpck [选项] …

在MySQL中isnull()函数不能作为替代null值!

在MySQL中isnull()函数不能作为替代null值&#xff01; 如下&#xff1a; 首先有个名字为business的表&#xff1a; SELECT ISNULL(business_name,no business_name) AS bus_isnull FROM business WHERE id2 直接运行就会报错&#xff1a; 错误代码&#xff1a; 1582 Incor…

cuDNN-Graph API

Graph API 为了适应越来越重要的算子融合需求&#xff0c;cuDNN8.0版本引入了Graph API&#xff0c;以提供更灵活的API接口。Graph API提供一个声明式的编程模型&#xff0c;此模型将计算操作描述为计算图。 用户首先需要构建操作图。从高层面来说&#xff0c;用户其实是在描…

Swift - Playground

文章目录 Swift - Playground1. 新建Playground2. View3. 图片4. ViewController5. Playground - 多Page6. 注释6.1 Playground的注释支持markup语法&#xff08;与markdown相似&#xff09;6.1.1 语法 Swift - Playground Playground可以快速预览代码效果&#xff0c;是学习语…

设计模式(九):组合模式

设计模式&#xff08;九&#xff09;&#xff1a;组合模式 1. 组合模式的介绍2. 组合模式的类图3. 组合模式的实现 1. 组合模式的介绍 组合模式&#xff08;Composite Pattern&#xff09;属于结构型模式&#xff0c;是用于把一组相似的对象当作一个单一的对象。 组合模式依据…

基于SpringBoot+Vue校园二手交易系统的设计与实现

系统介绍 自从新冠疫情爆发以来&#xff0c;各个线下实体越来越难做&#xff0c;线下购物的人也越来越少&#xff0c;随之带来的是一些不必要的浪费&#xff0c;尤其是即将毕业的大学生&#xff0c;各种用品不方便携带走导致被遗弃&#xff0c;造成大量的浪费。本系统目的就是让…

基于Spring Boot的旅游管理系统设计与实现

基于Spring Boot的旅游管理系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 前台浏览管理界面图&#xff0c;通过内容列表可以获取网…

PotatoPie 4.0 实验教程(41) —— FPGA实现RISC-V 扩展 GPIO UART Timer功能

TD工程介绍 我们提供的TD工程里的RISC-V核默认就开启了GPIO UART扩展&#xff0c;可以看到还有SPI和I2C扩展。因此后面的实验中TD的工程我们基本不怎么修改TD的内容&#xff0c;只需要修改TD工具中Soc_Top.v文件中的TCM0_INITFILE为FD生成的固件名称即可&#xff0c;主要修我以…

智慧校园-自动化办公管理系统要素

在如今&#xff0c;一个学校的自动化办公系统的完成程度已经成为衡量这个学校的信息化管理标准之一了。自友智慧校园所研发的自动化办公管理系统能使学校内部的人员能够方便、快捷的共享信息&#xff0c;从而高校的协同工作。这样就改变了过去那种复杂、低效的手工办公方式&…

【mysql】mysql命令使用大全,你想要的都在这里

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

推荐算法顶会论文合集

SIGIR SIGIR 2022 | 推荐系统相关论文分类整理&#xff1a;8.74 https://mp.weixin.qq.com/s/vH0qJ-jGHL7s5wSn7Oy_Nw SIGIR2021推荐系统论文集锦 https://mp.weixin.qq.com/s/N7V_9iqLmVI9_W65IQpOtg SIGIR2020推荐系统论文聚焦&#xff1a; https://mp.weixin.qq.com/s…

go设计模式之工厂方法模式

工厂方法模式 什么是工厂方法模式 工厂方法模式是一种创建型设计模式&#xff0c;它定义了一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。工厂方法使一个类的实例化推迟到其子类。 这个接口就是工厂接口&#xff0c;子类就是具体工厂类&#xff0c;而需要创…

设计模式-命令模式(Command Pattern)结构|原理|优缺点|场景|示例

命令模式&#xff08;Command Pattern&#xff09;是一种行为设计模式&#xff0c;它将请求封装为一个对象&#xff0c;使得请求的发送者和接收者之间解耦。命令对象可以携带参数&#xff0c;支持撤销操作&#xff0c;并且可以被存储、记录、序列化、排队、日志等&#xff0c;从…

《QT实用小工具·四十三》历史编辑器(支持历史搜索 关键字匹配)

1、概述 源码放在文章末尾 该项目实现了在输入框中输入部分信息能全部展现之前的历史输入信息&#xff0c;支持历史搜索和关键词匹配&#xff0c;项目demo演示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #include "historymodel.h" #include <QM…

实时通讯技术 WebRTC 介绍

WebRTC WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音对话或视频对话的技术。 历史 2010年5月&#xff0c;Google以6820万美元收购VoIP软件开发商Global IP Solutions的GIPS引擎&#xff0c;并改为名为“WebRTC”。WebRTC使用…

大语言模型Ollama

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Ollama简介 Ollama是一个开源的大语言模型平台&#xff0c;它允许用户在本地环境中运行、创建和共享大型语言模型。Ollama提供了丰富的功能和特性&#xff0c;使得用户可以…

解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域

解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务&#xff08;Spring MVC Springboot&#xff09;同时允许跨域 Tomcat 配置允许跨域Web 项目配置允许跨域Tomcat 同时允许静态文件和 Web 服务跨域 偶尔遇到一个 Tomcat 部署项目跨域问题&#xff0c;因为已经处理过…

mysql 连接数配置,解决Too many connections错误

参考&#xff1a;https://developer.aliyun.com/article/824585 查看当前连接数 SHOW full PROCESSLIST; 查看最大连接数配置 show variables like ‘%max_connections%’; 配置 [mysqld] # 通过修改 MySQL 配置文件调整最大连接数 max_connections 5266# 设置超时时间&am…

为什么MySQL使用B+树而不是跳表

1. 磁盘IO效率问题 MySQL是基于磁盘存储系统&#xff0c;而B树的设计就很符合磁盘存储系统&#xff0c;它可以最大化地减少磁盘IO操作。而磁盘IO的读写速度远小于内存的读写速度&#xff0c;所以减少磁盘IO操作对于MySQL性能的提升至关重要&#xff0c;与之相对&#xff0c;Re…