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

排序算法稳定性

稳定性:
用一句话总结排序算法的稳定性就是:同样的值,在排完序之后改不改变相对次序。
举例:arr[] = {3,2,1,2,1,3},数组中共有1、2 、3各2个数,排完序之后arr1[] = {1,1,2,2,3,3}。稳定性是指排完序之后,arr[]中的第一个位置的1在arr1[]中是否还是第一个,arr[]中第2个位置的1在arr1[]中是否还在第二个。
如果能保持不变,证明这个算法有稳定性,否则,则称为没有稳定性。

这种有稳定性的排序对基础类型的数据来讲是没用的,1就是1、2就是2,相同数字之间任顺序调换,丝毫没有影响,但是如果是自定义的类就不同了。

举例:
比如说:Student类中有班级class和年龄age属性。
第一次先用age有小到大进行排序。排完序之后 年龄小 -> 年龄大。
在紧接着用班级进行由小到大排序,此时如果这个算法是有稳定性的,那么排完序的结果里,1班学生的内部年龄也一定是从小到大的。2班学生的内部年龄也一定是从小到大的。

再比如说。商品价格区间100 - 200,先按照价格进行排序。再根据好评度进行排序。如果算法是由稳定性的,那么得到的结果中,第一条数据就是最物美价廉的商品。

排序算法总结:
基于之前更新的所有帖子中所介绍的算法做一个总结。

时间复杂度额外空间复杂度稳定性
选择排序 O ( N 2 ) O(N^2) O(N2) O ( 1 ) O(1) O(1)
冒泡排序 O ( N 2 ) O(N^2) O(N2) O ( 1 ) O(1) O(1)
插入排序 O ( N 2 ) O(N^2) O(N2) O ( 1 ) O(1) O(1)
归并排序 O ( N ∗ l o g N ) O(N * log^N) O(NlogN) O ( N ) O(N) O(N)
随机快排 O ( N ∗ l o g N ) O(N * log^N) O(NlogN) O ( l o g N ) O(logN) O(logN)
堆排序 O ( N ∗ l o g N ) O(N * log^N) O(NlogN) O ( 1 ) O(1) O(1)
========
计数排序 O ( N ) O(N ) O(N) O ( M ) O(M) O(M)
基数排序 O ( N ) O(N ) O(N) O ( N ) O(N) O(N)

总结:
为了绝对速度选快排,稳定性选归并排序,占用空间少选堆排序。

http://www.lryc.cn/news/91150.html

相关文章:

  • 统计学期末复习整理
  • Sketch在线版免费使用,Windows也能用的Sketch!
  • 详解uni-app项目运行在安卓真机调试
  • 体积小、无广告、超实用的5款小工具
  • OZON好出单吗?新手如何做?注意事项是什么?
  • 性能测试需求分析有哪些?怎么做?
  • STM32F103RCT6 -- 基于FreeRTOS 的USART1 串口通讯
  • 区间预测 | MATLAB实现基于QRCNN-LSTM-Multihead-Attention多头注意力卷积长短期记忆神经网络多变量时间序列区间预测
  • 递归--打印一个字符串的全部排列(java)
  • 【001 设备驱动】主设备号和次设备号的用途
  • 移动端PDF在线预览
  • 虚拟机两次寻址
  • DRF之JWT认证
  • 华为OD机试真题 Java 实现【放苹果】【2022Q4 100分】
  • 拼多多继续ALL IN
  • Unity的IPostprocessBuildWithReport:深入解析与实用案例
  • 九、Spring Cloud—gateway网关
  • ARM微架构与程序编写
  • Windows下利用Anaconda创建多个CUDA环境
  • C SS复习笔记
  • LeetCode 225 用队列实现栈
  • Java对象的共享
  • 漏洞概述-0day漏洞利用原理(0)
  • 交换机的4种网络结构方式:级联方式、堆叠方式、端口聚合方式、分层方式
  • firewall-cmd防火墙策略
  • 解决SQLException: Incorrect string value异常
  • 桂院校园导航 导入 与 配置教程
  • Linux上安装jdk Tomcat mysql redis
  • Postman中加url环境变量和token全局变量
  • 多线程事务回滚方法