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

目录

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

什么是排序算法的稳定性

基础排序算法的稳定性

插入排序法

希尔排序法

冒泡排序法

总结

高级算法的稳定性

快速排序法

堆排序法

归并排序法

总结

注意


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

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

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

什么是排序算法的稳定性

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

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

基础排序算法的稳定性

选择排序法

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

第一趟选择排序后:

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

插入排序法

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

希尔排序法

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

冒泡排序法

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

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

总结

高级算法的稳定性

快速排序法

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

堆排序法

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

举一个小例子:

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

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

归并排序法

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

总结

注意

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

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

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

相关文章

安装gnvm,nodejs,npm使用方法

安装gnvm,nodejs,npm使用方法 一、安装gnvm gnvm.exe下载地址&#xff1a; https://download.csdn.net/download/hsg77/88651752 http://ksria.com/gnvm/#download 二、配置gnvm环境变量 新建目录&#xff0c;如&#xff1a;d:/nodejs 并把gnvm.exe存储到此目录 并把d:/node…

【MATLAB第85期】基于MATLAB的2023年智能进化算法/元启发式算法合集(持续更新)

【MATLAB第85期】基于MATLAB的2023年智能进化算法/元启发式算法合集&#xff08;持续更新&#xff09; 1.海象进化算法&#xff08;Walrus Optimization Algorithm&#xff09; 作者&#xff1a;Pavel Trojovsk and Mohammad Dehghani 2.暴龙优化算法&#xff08;Tyrannosa…

安卓13上手势导航失效、手机卡死问题

问题描述&#xff1a;打开我们开发的app后&#xff0c;手势导航无法退回、无法回到桌面、无法切换应用。 使用设备&#xff1a;小米手机、MI14,、安卓13 未适配安卓13安卓x的情况下&#xff0c;检查自己的 AndroidManifest 文件&#xff0c;过滤器是否设置了 <category a…

什么是伦敦金的假突破?假突破为何有效?

部分投资者做伦敦金交易的时候喜欢追逐那些强势的行情&#xff0c;也就是我们所说的突破行情。但是突破行情会带来两种结果&#xff0c;一种是突破成功&#xff0c;而另一种是出现假突破。什么是伦敦金中的假突破呢&#xff1f;为什么假突破会有效呢&#xff1f;下面我们就来讨…

Python自动化测试(超详细总结)

Python自动化测试常用于Web应用、移动应用、桌面应用等的测试 Python自动化实现思路通常分为以下几步&#xff1a; 1. 确定自动化测试的范围和目标&#xff1a; 首先需要明确需要进行自动化测试的范围和目标&#xff0c;包括测试场景、测试用例、测试数据等。 2. 选择自动化…

考研数学二内容总结

目录 高等数学 一、函数、极限、连续 考试内容 &#x1f3c1;总结&#xff1a; 考试要求 &#x1f3c1;1&#xff0e;理解函数的概念&#xff0c;掌握函数的表示法&#xff0c;会建立应用问题的函数关系&#xff0e; 2&#xff0e;了解函数的有界性、单调性、周期性和奇…

el-tree lazy懒加载(进阶版)

2023.12.22今天我学习了el-tree如何实现懒加载&#xff0c;效果如&#xff1a; 代码如下&#xff1a; 懒加载的使用不需要用:data <template><div><el-tree:props"props":load"loadNode"lazynode-key"id"show-checkbox/><…

寒冬送温暖||关爱山东省济宁市泗水县残疾人孤寡老人暖冬行

倡导扶残助弱的社会风尚&#xff0c;共建和谐美好的社会&#xff0c;保障山区残疾人、孤寡老人特殊群体度过一个安全、温暖的寒冬。12月19日&#xff0c;潍坊市金阳公益服务中心 、济宁市泗水县残疾人联合会、山东金琉通国际文化交流有限公司志愿站 在潍坊市社会组织培育中心举…

uniapp 添加分包页面,配置分包预下载

为什么要分包 ? 分包即将小程序代码分成多个部分打包&#xff0c;可以减少小程序的加载时间&#xff0c;提升用户体验 添加分包页面 比较便捷的方法是使用vscode插件 uni-create-view 新建分包文件夹 以在我的页面&#xff0c;添加分包的设置页面为例&#xff0c;新建文件夹 s…

python:删除空白

删除字符串末尾的空白 例如&#xff0c;下面的代码&#xff0c;变量hobby指向的字符串在末尾有一个空格&#xff1a; 可以使用函数rstrip()删除字符串末尾的空格&#xff0c;如下&#xff1a; 因为删除字符串末尾的空格并没有赋值给原变量hobby&#xff0c;所以此时查看hobb…

PDF文件如何设置限制打印?

想要限制PDF文件的打印功能&#xff0c;想要限制PDF文件打印清晰度&#xff0c;都可以通过设置限制编辑来达到目的。 打开PDF编辑器&#xff0c;找到设置限制编辑的界面&#xff0c;切换到加密状态&#xff0c;然后我们就看到 有印刷许可。勾选【权限密码】输入一个PDF密码&am…

lua中的循环 while、for、repeat until三种循环方式、pairs和ipairs区别

lua中的循环 while、for、repeat until三种循环方式、pairs和ipairs区别 介绍for循环参数ipairs和pairs whilerepeat until总结 介绍 这里我用while、for、repeat until分别输出1-20之间的奇数 &#xff0c;具体的语法可以看下面的代码 for循环 参数 定义一个初始值为start…

网络基础篇【网线的制作,OSI七层模型,集线器和交换机的介绍,路由器的介绍与设置】

目录 一、网线制作 1.1 工具介绍 1.1.1网线 1.1.2 网线钳 1.1.3 水晶头 1.1.4 网线测试仪 二、OSI七层模型 2.1 简介 2.2 OSI模型层次介绍 2.2.1 结构图 2.2.2 数据传输过程 2.3 相关网站 二、集线器 2.1 介绍 2.2 适用场景 三、交换机 3.1 介绍 3.2 适用场景…

重学设计模式-Iterator(迭代器模式)

Iterator迭代器模式 介绍&#xff1a; 迭代器模式是一种行为型设计模式&#xff0c;它允许你在不暴露集合底层表示&#xff08;并不知道集合底层使用何种方式对数据尽心存储&#xff09;的情况下遍历集合中的元素。 这种模式提供了一种方法&#xff0c;可以顺序访问一个聚合…

Moonbeam生态项目分析 — — 游戏项目The Great Escape

概览 The Great Escape是一款2D的Play and Earn平台游戏&#xff0c;曾入选MoonbeamMoonbeam Accelerator&#xff0c;并经此培训孵化后于2023年7月正式发表。 玩家必须在给定时间内在充满敌人和陷阱的关卡中收集尽可能多的水果。游戏结束后&#xff0c;游戏主要根据收集的水…

Pytorch-RealSR超分模型

1.前言 RealSR 是一种基于学习的单图像超分辨率&#xff08;SISR&#xff09;模型&#xff0c;专门针对真实世界的图像。它由腾讯 AI 实验室于 2020 年提出。 RealSR 的核心创新是提出了一种新的退化模型&#xff0c;该模型能够更好地模拟真实世界的退化过程。该模型考虑了真实…

【已解决】修改了网站的class样式name值,会影响SEO,搜索引擎抓取网站及排名吗?

问题&#xff1a; 修改了网站的class样式name值&#xff0c;会影响搜索引擎抓取网站及排名吗&#xff1f; 解答&#xff1a; 如果你仅仅修改了网站class样式的名称&#xff0c;而没有改变网站的结构和内容&#xff0c;那么搜索引擎通常不会因此而影响它对网站的抓取和排名。但…

中国自动驾驶行业:迈向无限可能

中国自动驾驶行业正在经历蓬勃发展&#xff0c;取得了令人瞩目的成果。这一行业在技术创新、政策支持和市场需求等方面展现出巨大潜力。本文将从技术创新、产业生态和前景发展等角度&#xff0c;探讨中国自动驾驶行业的现状和未来前景。 中国自动驾驶行业正处于一个令人瞩目的快…

C++基础语法总结

C使用 C的源文件扩展名是&#xff1a;cppC程序的入口是main函数C完全兼容c语言的语法 1、cin、cout C中常使用cin、cout进行控制台的输入和输出 #include <iostream> using namespace std;int main() {cout << "hello world !!!" << endl;retu…

德人合科技 | 设计公司文件加密系统——天锐绿盾自动智能透明加密防泄密系统

设计公司文件加密系统——天锐绿盾自动智能透明加密防泄密系统 PC端访问地址&#xff1a; www.drhchina.com 一、背景介绍 设计公司通常涉及到大量的创意作品、设计方案、客户资料等重要文件&#xff0c;这些文件往往包含公司的核心价值和商业机密。因此&#xff0c;如何确保…