当前位置: 首页 > news >正文

基于比较的排序算法总结(java实现版)

目录

什么是基于比较的排序算法

什么是排序算法的稳定性

基础排序算法的稳定性

插入排序法

希尔排序法

冒泡排序法

总结

高级算法的稳定性

快速排序法

堆排序法

归并排序法

总结

注意


什么是基于比较的排序算法

基于比较的排序算法定义:之所以能给元素排序依赖于元素和元素之间的比较,在代码中体现为所处理的数组对应的元素类型实现了Comparable这个接口。

基于比较的排序算法有选择排序、插入排序、冒泡排序、归并排序(自顶向下/自底向上)、快速排序(单/双/三路排序)、堆排序、希尔排序(不同步长序列)。

什么是排序算法的稳定性

排序的稳定性:排序前相等的连个元素在排序后相对位置不变

 也就是根据数值大小排序后,A还在E的前面,C也还在F的前面。

基础排序算法的稳定性

选择排序法

按照学生成绩排序,注意A和C的初始位置。

第一趟选择排序后:

C跑到了A的前面,选择排序算法是不稳定的。 

插入排序法

因为插入排序法从后往前和上一个元素相比时用的是“< ”而不是“<=”,所以对于数值相等的元素不会改变相对位置。所以写代码时要注意有无“=”号,不要错误的实现成不稳定算法。

希尔排序法

希尔排序的分组是隔着元素跳跃的,所以相对位置会改变。

冒泡排序法

因为冒泡排序法每次只比较相邻的元素,,相同大小的元素没有机会“跳跃”。

上图的两个80怎么也没办法交换位置的。但其实它的稳定性也依赖于具体实现,下图标红的是“>”号而不是“>=”号,如果实现的不准确就会变得不稳定。

总结

高级算法的稳定性

快速排序法

快速排序中的portion会随机选择一个点为标准点然后交换位置,这种随机性决定了它是不稳定算法。

堆排序法

堆排序把数组看成了一个树型的结构,树型结构上的两个元素交换位置对应到数组上就会产生跳跃,因此是不稳定的。

举一个小例子:

每次把堆顶的元素放到未处理的最后的一个位置,所以第一步会把AC交换,然后固定下来最大的元素。

即80出堆,C到了堆顶的位置。

归并排序法

我们在merge的过程中如果遇到两个小分数组中有相同的元素,只需要保证优先选择第一个数组中的元素进入新的合并数组中就好,和插入排序和选择排序一样,只要具体实现正确的话,归并排序法是稳定的。

总结

注意

虽然我们花很长的时间来分析各个排序算法的稳定性,但我们需要知道这一切都建立在元素有多个域的前提下,也就是说我们要赋予元素一个额外的意义,比如有两个学生都考了78分,这是属于两个不同的学生的分数,一个域是学生分数,另一个域是学生的名字,而不是说它就单单只是个数字78,在一个纯数字的数组中,两个78根本没有任何区别,稳定性也没有任何意义。 

相关文章:

基于比较的排序算法总结(java实现版)

目录 什么是基于比较的排序算法 什么是排序算法的稳定性 基础排序算法的稳定性 插入排序法 希尔排序法 冒泡排序法 总结 高级算法的稳定性 快速排序法 堆排序法 归并排序法 总结 注意 什么是基于比较的排序算法 基于比较的排序算法定义&#xff1a;之所以能给元素…...

集群与分布式的概念及区别

目前在工作中经常接触到集群的概念&#xff0c;通过这篇文章总结一下集群的几种方式以及和分布式对比学习 1.集群&#xff08;Cluster&#xff09; 集群是由多个计算机节点组成的网络&#xff0c;旨在共同提供服务&#xff0c;并确保高性能和高可用性。在高可用集群中&#xf…...

基于ssm+vue的在线听书网站论文

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;书籍信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广大…...

hive命令启动出现classnotfound

环境&#xff1a;ambari集群三个节点node104、node105和node106&#xff0c;其中node105上有hiveserver2&#xff0c;并且三个节点均有HIVE CLIENT 注意&#xff1a;“./”指hive安装目录 其中装有hiveserver2的node105节点&#xff0c;由于某种需要向lib目录下上传了某些jar包…...

拥抱数字化转型,共赢数字时代 | 创维汽车商学院走进竹云

数字化浪潮汹涌而来&#xff0c;变革与创新接踵而至。随着数字技术日益融入经济社会发展的各个领域&#xff0c;数字经济与实体经济的“双向奔赴”也不断催生着新产业、新业态、新模式&#xff0c;为经济社会发展持续注入创新活力。12月19日&#xff0c;创维汽车商学院带领嘉宾…...

蓝桥杯:日期问题

目录 引言一、日期问题1.题目描述2.代码实现3.测试 二、回文日期1.题目描述2.代码实现3.测试 引言 关于这个蓝桥杯的日期问题&#xff0c;其实有一个明确的思路就感觉很简单&#xff0c;这个思路就是不用依照日期的顺序去把每一天走完&#xff0c;而是根据一个数加一&#xff…...

vue 简单实现购物车:商品基础信息最终的 html 文件 + 商品计数器的组件处理,实现了购物车;

购物车实现过程&#xff1a; Ⅰ、商品购物车作业需求&#xff1a;1、商品购物车页面示例&#xff1a;2、具体需求&#xff1a; Ⅱ、html 文件的构建&#xff1a;商品购物车.html Ⅲ、组件文件的构建&#xff1a;商品购物车1.js Ⅳ、小结&#xff1a; Ⅰ、商品购物车作业需求&am…...

交叉熵损失(Cross Entropy Loss)学习笔记

在分类任务中&#xff0c;我们通常使用交叉熵作为损失函数&#xff0c;首先给出交叉熵的计算公式&#xff1a; 二分类中&#xff1a; L 1 N ∑ i L i 1 N ∑ i − [ y i l o g ( p i ) ( 1 − y i ) ⋅ l o g ( 1 − p i ) ] \mathcal{L}\frac1{N}\sum_{i}L_i\frac1{N}\sum…...

python flask alchemy在判断None值时与flake8格式检测冲突

python flask alchemy 在判断None值时候&#xff0c;推荐使用/!来判断。例如&#xff1a; query.filter(User.nameNone)query.filter(User.name!None) 但是这样的代码提交后时过不了flake8的语法检查&#xff0c;会报错&#xff1a; flake8...................................…...

Text Intelligence - TextIn.com AI时代下的智能文档识别、处理、转换

本指南将介绍Text Intelligence&#xff0c;AI时代下的智能文档技术平台 Textin.com 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#xff0c;阿里云认…...

55.0/CSS 的应用(详细版)

目录 55.1.1 设计边框样式 55.1.2 调整边框的粗细 55.1.3 边框颜色 55.1.4 复合设置边框 55.2 模块的边距 55.3 模块的内边距 55.4 层的应用 55.4.1 层的建立 55.4.2 浮动——float 55.4.3 清除浮动 55.4.4 层的定位 55.4.5 设置层的溢出——overflow 55.4.6 设置鼠…...

磁盘类型选择对阿里云RDS MySQL的性能影响

测试说明 这是一个云数据库性能测试系列&#xff0c;旨在通过简单标准的性能测试&#xff0c;帮助开发者、企业了解云数据库的性能&#xff0c;以选择适合的规格与类型。这个系列还包括&#xff1a; * 云数据库(RDS MySQL)性能深度测评与对比 * 阿里云RDS标准版(x86) vs 经济…...

数据结构---算法的时间复杂度

文章目录 前言计算机重要存储数据结构与算法数据结构概念算法 数据库概念 算法的复杂度时间复杂度概念为什么有时间复杂度大O渐进表示法时间复杂度实例实例1&#xff1a;时间复杂度&#xff1a;O&#xff08;N&#xff09;实例2&#xff1a;这里输入参数是不确定的所以 时间复杂…...

后缀为.vue是什么文件

.vue是一种文件格式&#xff0c;它是用于构建Web应用程序的前端框架Vue.js的组件文件 Vue.js是一个流行的JavaScript框架&#xff0c;用于构建用户界面 在Vue.js中&#xff0c;应用程序被组织为一组可重用的组件&#xff0c;而.vue文件就是用来定义这些组件的 一个.vue文件包…...

前端微信小程序AES加密解密踩坑

项目场景&#xff1a; 今天蛮沮丧的&#xff0c;在和别人对接的时候aes加解密的时候踩了坑。今天有个同事请假了&#xff0c;所以本来他和别人对接的活&#xff0c;老大给了我&#xff0c;然后我就正式踏上了战战兢兢的对接之路。 1.一开始的时候对面先是问用的啥加密方法。这…...

代码随想录算法训练营第五十八天| 739 每日温度 496 下一个更大元素 |

目录 739 每日温度 496 下一个更大元素 | 739 每日温度 求后面第一个比他大的元素的位置&#xff0c;单调栈如果递增 求后面第一个比他小的元素的位置&#xff0c;单调栈需要递减 class Solution { public:vector<int> dailyTemperatures(vector<int>& tempe…...

配置自定义RedisTemplate 解决redis序列化java8 LocalDateTime

目录 配置自定义RedisTemplate 引入依赖 配置连接redis 编写测试类 出现问题 配置序列化 解决redis序列化java8 LocalDateTime 问题背景 问题描述 问题分析 解决方案一&#xff08;全局&#xff09; 解决方案二&#xff08;单个字段&#xff09; 配置自定义RedisTe…...

华为---登录USG6000V防火墙---console、web、telnet、ssh方式登录

目录 一、环境搭建 二、第一次登录USG6000V防火墙&#xff0c;即通过console方式登录 三、用户配置 四、web登录USG6000V防火墙 1. 用web创建的用户通过web方式登录USG6000V防火墙 2. 命令行创建的用户通过web方式登录USG6000V防火墙 五、ssh方式登录USG6000V防火墙 1. 用…...

css图片属性,图片自适应

CSS 图片属性指南&#xff1a;background-size 和 object-fit 在前端开发中&#xff0c;使用图片是非常常见的。为了让图片在网页中显示得更好&#xff0c;CSS 提供了多种属性来调整和控制图片的大小和布局。其中&#xff0c;background-size 和 object-fit 是两个常用的属性&a…...

【Python百宝箱】数据科学的黄金三角:数据挖掘和聚类

数据之舞&#xff1a;Python数据科学库横扫全场 前言 在当今数据驱动的时代&#xff0c;Python成为数据科学家和分析师的首选工具之一。本文将介绍一系列强大的Python库&#xff0c;涵盖了数据处理、可视化、机器学习和自然语言处理等领域。无论你是初学者还是经验丰富的数据…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...