各大“排序”特性及稳定性总结

简介: 各大“排序”特性及稳定性总结

一、各个排序特性




二、各个排序的稳定性分析及例子


       稳定性如何定义:排序算法的稳定性并不是指它在对数组进行排序的时候的时间复杂度是否变化,而是对于相同数值的数据进行排序了之后它们的相对位置是否发生了变化,比如说在考试的时候,小明先交卷,小强后交卷,但是他们改出来的成绩是相同的,因为小明先交卷,改出来的成绩数据肯定放在前面,小强后交卷,改出来的成绩数据肯定放在后面,所以排完序之后要求小明的成绩依然在前面,这叫做排序算法的稳定性。如果排完序之后小明的数据跑到了后面去,那对小明来说肯定是不公平的,所以在这种情况下在进行排序的时候就需要选择稳定的排序算法了。


冒泡排序:稳定,因为冒泡排序是两两比较,再进行交换的,如果两个数据相等的时候不进行交换就能做到相同数据始终保持着原来的相对大小关系了。


选择排序:不稳定,很多人误以为这个选择排序是稳定的,包括有些书本也说选择排序是稳定的排序,他们想着选择排序就是每次找到一个最小值放到最左边,如果有多个最小值就拿靠前的那个就能做到不改变相同数据的相对位置了,我一开始也是这样子想的,但是再仔细想一下你会发现,如果最左边的值也存在重复的值,而且找到的最小值又是在这个重复的值的右边呢?那在你把找到的最小值交换到最左边的时候就会改变了另一个重复数字之间的相对位置了。所以选择排序是不稳定的。这里是一个易错点。演示看下图:



直接插入排序:稳定,因为直接插入排序是从后往前找比自己小的数,再插入到这个数的后面的,只要在找到和自己相等的数的时候,插入到这个数的后面,就能够保证相等的数的相对位置在排序前后是保持不变的。


希尔排序:不稳定,因为希尔排序是通过分组预排序实现的,当相同的数分到不同的组,在预排序的时候有可能改变它们的相对位置。如下:



堆排序:不稳定,在排序过程中,向下调整会使相同的数的相对位置发生变换。如下:(4条消息) “堆”排序_KOBE 0824 BRYANT的博客-CSDN博客



归并排序:稳定, 在归并的时候只要保证左边的先归并,右边的后归并就能保证相同数据的相对位置不发生变化,归并排序也是几个时间复杂度为O(N*logN)量级中唯一一个稳定的排序。但是需要O(N)的空间复杂度。


快速排序:不稳定,无论是快排的哪一种版本的写法(hoare法,挖坑法,前后指针法,三路划分法),都不能保证相同数据在排完序之后的相对位置不发生变化。因为当两个相等的数都比key大的时候,前一个数肯定会交换到右边更靠后的位置,后一个数肯定会交换到右边更靠前的位置,此时相对位置一定发生了变化,所以快速排序时不稳定的,如下图:



以上就是关于排序算法稳定性分析及各排序各方面特性的总结,你学会了吗?

相关文章
|
物联网 测试技术 网络性能优化
MQTT常见问题之收不到MQTT消息如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
11月前
|
人工智能 Cloud Native 容灾
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
259 2
|
安全 Java 网络安全
当网络安全成为数字生活的守护者:Spring Security,为您的应用筑起坚不可摧的防线
【9月更文挑战第2天】在数字化时代,网络安全至关重要。本文通过在线银行应用案例,详细介绍了Spring Security这一Java核心安全框架的核心功能及其配置方法。从身份验证、授权控制到防御常见攻击,Spring Security提供了全面的解决方案,确保应用安全。通过示例代码展示了如何配置`WebSecurityConfigurerAdapter`及`HttpSecurity`,帮助开发者有效保护应用免受安全威胁。
170 4
|
10月前
|
SQL 存储 Oracle
【赵渝强老师】Hive的分区表
Hive的分区表与Oracle、MySQL类似,通过分区条件将数据分隔存储,提高查询效率。本文介绍了静态分区表和动态分区表的创建与使用方法,包括具体SQL语句和执行计划分析,附带视频讲解。静态分区表需显式指定分区条件,而动态分区表则根据插入数据自动创建分区。
891 1
|
数据格式
ECharts 饼图
本章节我们将绘制饼图。
356 15
|
11月前
|
机器学习/深度学习 PyTorch 算法框架/工具
图像数据增强库综述:10个强大图像增强工具对比与分析
在深度学习和计算机视觉领域,数据增强是提升模型性能和泛化能力的关键技术。本文全面介绍了10个广泛使用的图像数据增强库,分析其特点和适用场景,帮助研究人员和开发者选择最适合需求的工具。这些库包括高性能的GPU加速解决方案(如Nvidia DALI)、灵活多功能的Albumentations和Imgaug,以及专注于特定框架的Kornia和Torchvision Transforms。通过详细比较各库的功能、特点和适用场景,本文为不同需求的用户提供丰富的选择,助力深度学习项目取得更好的效果。选择合适的数据增强库需考虑性能需求、任务类型、框架兼容性及易用性等因素。
1740 10
|
安全 网络安全 数据安全/隐私保护
auth required pam_tally2.so file=/var/log/tallylog onerr=fail deny=3 unlock_time=300 even_deny_root root_unlock_time=300 什么作用?
【8月更文挑战第2天】auth required pam_tally2.so file=/var/log/tallylog onerr=fail deny=3 unlock_time=300 even_deny_root root_unlock_time=300 什么作用?
277 1
|
架构师 NoSQL 中间件
挑战架构师极限:分布式锁的四种实现方式,优劣对比让你一目了然!
【8月更文挑战第29天】在2024年软考架构师考试中,掌握分布式锁的实现方法极其重要。本文详细介绍了基于数据库、Redis及ZooKeeper三种常见分布式锁方案。数据库锁简单易懂但性能低;Redis锁性能优越且支持自动续期,但需引入中间件;ZooKeeper锁可靠性高,适用于分布式环境,但实现复杂。通过对比各方案优缺点,帮助考生更好地应对考试,选择最适合业务场景的分布式锁策略。
1168 0
|
搜索推荐 算法 UED
基于Python的推荐系统算法实现与评估
本文介绍了推荐系统的基本概念和主流算法,包括基于内容的推荐、协同过滤以及混合推荐。通过Python代码示例展示了如何实现基于内容的推荐和简化版用户-用户协同过滤,并讨论了推荐系统性能评估指标,如预测精度和覆盖率。文章强调推荐系统设计的迭代优化过程,指出实际应用中需考虑数据稀疏性、冷启动等问题。【6月更文挑战第11天】
2014 3
|
人工智能 PyTorch TensorFlow
极智AI | onnx模型增删改查算子节点方法
大家好,我是极智视界,本文介绍一下 onnx 模型增、删、改、查算子节点方法。
951 0