Java数据结构-排序

目录

一.本文关注焦点

二.七大排序分析及相关实现

1.冒泡排序

2.简单选择排序 

3.直接插入排序

4.希尔排序

5.堆排序

​编辑

6.归并排序

7.快速排序


一.本文关注焦点

各种排序的代码实现及各自的时间空间复杂度分析及稳定性。

时间复杂度:在比较排序中主要指排序中两数比较交换次数

空间复杂度:在比较排序中指除原来存储数据开辟的空间外在排序过程又开辟的其它空间

时间复杂与空间复杂度计算自行学习:
时间复杂度和空间复杂度(超详细)-CSDN博客

稳定性:指排序过程中数据的相对位置是否发生改变

介绍如下图:

当前未排序时黑色5在红色5之前,若排序后黑5仍然在红5之前,即二者的相对位置未发生改变,则该排序稳定,否则称该排序不稳定。

需要注意的是:稳定排序可更改为不稳定排序,而不稳定排序一定是不稳定排序 

二.七大排序分析及相关实现

1.冒泡排序

冒泡排序动图:

https://i-blog.csdnimg.cn/direct/068c355a675c4d16918587bbab62ea53.gif

此冒泡排序还能继续进行优化 

空间复杂度分析:除为存储数组开辟空间外,在排序过程中只开辟一个辅助空间因此为O(1)。

时间复杂度: 

最坏:

将内外循环完全进行

最好:

序列已经有序经优化后只进行一趟比较可达O(n).

稳定性: 稳定

交换时等于并未进行交换,保持了数据的相对位置不变。

2.简单选择排序 

动图:

https://i-blog.csdnimg.cn/blog_migrate/e6eeb7ba10b2d32e4f3fb4efa470e01e.gif

空间复杂度:除存放数据数组外排序过程只开辟minIndex用来记录最小下标所以为O(1)。

时间复杂度:

最坏:

(n-1)+(n-2)+........+1 = n^2/2所以为O(n^2);

最好:

及时数据有序仍然需要进行比较所以仍然为O(n^2);

稳定性:稳定

此处比较不是<= 确保排序的稳定

3.直接插入排序

直接插入排序动图演示:
https://i-blog.csdnimg.cn/direct/5245b6cc9d6345398db1515e31632477.gif#pic_center

空间复杂度:除存储数组本身数据外只取一tamp空间所以为O(1)

时间复杂度:

最坏:

逆序时每次排序都要与有序区间数字全部比较一遍。

1+2+3+......+(n-2)+(n-1)=n^2/2所以复杂度为O(n^2) 

最好:

已经有序时

每次排序只需比较一次

1+1+1+...+1 = n-1所以为O(n)

稳定性:稳定

此处为>,不会使相同元素的相对位置发生改变。

4.希尔排序

希尔排序动图:

https://i-blog.csdnimg.cn/blog_migrate/420f5c5abac4bb459aaee2f95aaaf35f.gif

希尔排序可看做是直接插入排序的优化

空间复杂度: 

空间复杂度:除存储数组本身数据外只取一tamp空间所以为O(1)

时间复杂度:通常为O(n^1.3)~O(n^2)

最坏:O(n^2)非常少见

最好:O(nlogn)

稳定性:不稳定

希尔排序为跳跃式分组排序,排序后相同元素相对位置可能发生改变

5.堆排序

堆排序动态演示:

https://i-blog.csdnimg.cn/direct/a94c12bdf4fe4e03bfdf54a9a5aca3fe.gif#pic_center

此处1314送给各位看官。。

空间复杂度:排序过程中除存储数组本身数据外不取其它额外空间所以为O(1)

时间复杂度:

最坏:O(nlogn)

最好:O(nlogn)

堆排序的时间复杂度只与创建堆与调整堆有关与数据顺序无关

创建堆时每个非叶子结点最多进行两次交换因此其时间复杂度为O(n)

排序时每次调整堆的时间复杂度为logn,需要调整n-1次所以时间复杂度为O(nlogn)

总体为(O(n+1)logn)也就是O(nlogn).

稳定性:不稳定

6.归并排序

动画演示:

https://i-blog.csdnimg.cn/direct/cc1443bd7a3348f39013f146a3c1f1ca.gif#pic_center

空间复杂度:除本身为存储数组开辟空间外,还需要开辟辅助空间tampArr最终长度为n,所以空间复杂度为O(n).

时间复杂度:

最坏:O(nlogn)

最好:O(nlogn)

因为归并排序递归分割过程相当于二叉树,树高计算为logn此时分割完成,合并阶段每层和并数组大小为m+n,则logn层可计算为O(nlogn).

稳定性:稳定

归并排序性能不受输入数据的影响且稳定,代价为空间。

7.快速排序

动态演示:

https://i-blog.csdnimg.cn/blog_migrate/88b8eb041f669690da648466be9d2ddb.gif

基本版本实现(挖坑法找基准):

Hoare法:

三数取中优化:

空间复杂度:只有递归调用栈占用空间

最坏:单分支数高度为n,所以复杂度为O(n).

最好:完全二叉树,树高为logn所以复杂度为O(logn)

时间复杂度:

最坏:单分支树,退化为冒泡排序O(n^2)

最好:完全二叉树树高为logn,每次需要比较两次要比较n次,所以时间复杂度为O(nlogn).

稳定性:不稳定

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

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

相关文章

改进收敛因子和比例权重的灰狼优化算法【期刊论文完美复现】(Matlab代码实现)

2 灰狼优化算法 2.1 基本灰狼优化算法 灰狼优化算法是一种模拟灰狼捕猎自然群体行为的社会启发式优化算法&#xff0c;属于一种新型的群体智能优化算法。灰狼优化算法具有高度的灵活性&#xff0c;是当前较为流行的优化算法之一。灰狼优化算法主要分为三个阶段&#xff1a;追…

创建Linux虚拟环境并远程连接

目录 下载VMware软件 下载CentOS 创建虚拟环境 远程连接Linux系统 下载VMware软件 不会的可以参考 传送门 下载CentOS 不会的可以参考 传送门 创建虚拟环境 打开VMware软件&#xff0c;创建虚拟机 选择典型安装 找到我们安装好的centOS文件&#xff0c;之后会自动检…

汽车智能制造企业数字化转型SAP解决方案总结

一、项目实施概述 项目阶段划分&#xff1a; 蓝图设计阶段主数据管理方案各模块蓝图设计方案下一阶段工作计划 关键里程碑&#xff1a; 2022年6月6日&#xff1a;项目启动会2022年12月1日&#xff1a;系统上线 二、总体目标 通过SAP实施&#xff0c;构建研产供销协同、业财一…

《Head First设计模式》读书笔记 —— 命令模式

文章目录 本节用例餐厅类比点餐流程角色与职责从餐厅到命令模式 命令模式第一个命令对象实现命令接口实现一个命令 使用命令对象NoCommand与空对象 定义命令模式支持撤销功能使用状态实现撤销多层次撤销 One One One …… more things宏命令使用宏命令 队列请求日志请求 总结 《…

基于YOLO11深度学习的运动鞋品牌检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

DAY08 List接口、Collections接口、Set接口

学习目标 能够说出List集合特点1.有序2.允许存储重复的元素3.有带索引的方法(练习 add,remove,set,get) 能够使用集合工具类Collections类:static void sort(List<T> list) 根据元素的自然顺序 对指定列表按升序进行排序。static <T> void sort(List<T> lis…

shell编程总结

前言 shell编程学习总结&#xff0c;1万3千多字带你学习shell编程 往期推荐 14wpoc&#xff0c;nuclei全家桶&#xff1a;nuclei模版管理工具Nuclei 哥斯拉二开&#xff0c;免杀绕过规避流量检测设备 fscan全家桶&#xff1a;FscanPlus&#xff0c;fs&#xff0c;fscan适用…

OpenAI ChatGPT在心理治疗领域展现超凡同理心,通过图灵测试挑战人类专家

近期&#xff0c;一项关于OpenAI ChatGPT在心理治疗领域的研究更是引起了广泛关注。据报道&#xff0c;ChatGPT已经成功通过了治疗师领域的图灵测试&#xff0c;其表现甚至在某些方面超越了人类治疗师&#xff0c;尤其是在展现同理心方面&#xff0c;这一发现无疑为AI在心理健康…

【智能客服】ChatGPT大模型话术优化落地方案

本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 一、项目背景 1.1 行业背景 1.2 业务现…

【JavaWeb12】数据交换与异步请求:JSON与Ajax的绝妙搭配是否塑造了Web的交互革命?

文章目录 &#x1f30d;一. 数据交换--JSON❄️1. JSON介绍❄️2. JSON 快速入门❄️3. JSON 对象和字符串对象转换❄️4. JSON 在 java 中使用❄️5. 代码演示 &#x1f30d;二. 异步请求--Ajax❄️1. 基本介绍❄️2. JavaScript 原生 Ajax 请求❄️3. JQuery 的 Ajax 请求 &a…

[Android]APP自启动

APP添加自启动权限&#xff0c;重启设备后自动打开APP。 1.AndroidManifest.xml <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.an…

Moonshot AI 新突破:MoBA 为大语言模型长文本处理提效论文速读

前言 在自然语言处理领域&#xff0c;随着大语言模型&#xff08;LLMs&#xff09;不断拓展其阅读、理解和生成文本的能力&#xff0c;如何高效处理长文本成为一项关键挑战。近日&#xff0c;Moonshot AI Research 联合清华大学、浙江大学的研究人员提出了一种创新方法 —— 混…

cs224w课程学习笔记-第2课

cs224w课程学习笔记-第2课 传统图学习 前言一、节点任务1、任务背景2、特征节点度3、特征节点中心性3.1 特征向量中心性&#xff08;Eigenvector Centrality&#xff09;3.2 中介中心性&#xff08;Betweenness Centrality&#xff09;3.3 接近中心性&#xff08;Closeness Cen…

Centos虚拟机扩展磁盘空间

Centos虚拟机扩展磁盘空间 扩展前后效果1 虚拟机vmware关机后&#xff0c;编辑2 扩展2.1 查看2.2 新建分区2.3 格式化新建分区ext42.3.1 格式化2.3.2 创建2.3.3 修改2.3.4 查看 2.4 扩容2.4.1 扩容2.4.1 查看 扩展前后效果 df -h1 虚拟机vmware关机后&#xff0c;编辑 2 扩展 …

1.13作业

1 if(!preg_match("/[0-9]|\~|\|\|\#|\\$|\%|\^|\&|\*|\&#xff08;|\&#xff09;|\-|\|\|\{|\[|\]|\}|\:|\|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){eval($c); 构造数组rce ?ceval(array_pop(next(get_defined_vars()))); post传参:asystem("c…

如何在 SpringBoot 项目使用 Redis 的 Pipeline 功能

本文是博主在批量存储聊天中用户状态和登陆信息到 Redis 缓存中时&#xff0c;使用到了 Pipeline 功能&#xff0c;并对此做出了整理。 一、Redis Pipeline 是什么 Redis 的 Pipeline 功能可以显著提升 Redis 操作的性能&#xff0c;性能提升的原因在于可以批量执行命令。当我…

力扣LeetCode: 2209 用地毯覆盖后的最少白色砖块

题目&#xff1a; 给你一个下标从 0 开始的 二进制 字符串 floor &#xff0c;它表示地板上砖块的颜色。 floor[i] 0 表示地板上第 i 块砖块的颜色是 黑色 。floor[i] 1 表示地板上第 i 块砖块的颜色是 白色 。 同时给你 numCarpets 和 carpetLen 。你有 numCarpets 条 黑…

RabbitMQ 消息队列

1. 消息队列是什么&#xff1f; 当用户注册成功后&#xff0c;就发送邮件。当邮件发送成功了&#xff0c;接口才会提示注册成功信息。但由于发送邮件&#xff0c;依赖于其他厂商的服务&#xff0c;有可能他们的接口会非常耗时。那么用户就一直要等着邮件发送成功了&#xff0c;…

【SQL实验】触发器

下载素材文件”tsgl”、“成绩管理”,将tsgl.bak和成绩管理.bak数据库还原到库中【导入操作在之前的文章中详细讲过】 触发器 1、为图书表设置更新触发器&#xff0c;根据总编号来更新书名、作者、出版社、分类号和单价(根据总编号找到相应记录&#xff0c;然后更新书名、作者…

Win10系统Docker+DeepSeek+ragflow搭建本地知识库

文章目录 1、安装ollama1.1 下载1.2 安装1.3 cmd命令行测试安装成功1.4 拉取模型2、安装ragflow2.1 下载项目2.2 通过docker拉取镜像安装2.3 查看docker日志是否安装成功3、模型配置3.1 第一次登录需要注册3.2 模型添加4、知识库配置4.1 创建知识库4.2 上传文档4.3 解析5、聊天…