算法系列8——排序算法稳定性和排序总结

文章探讨了排序算法的稳定性,指出稳定排序如冒泡、插入和归并排序的特点,同时提到快速、选择和堆排序在某些操作中可能破坏稳定性。对于O(N*logN)的时间复杂度,通常选择快速排序,但归并排序在稳定性上有优势。文章还讨论了如何在特定场景下权衡排序算法的选择,以及工程实践中针对稳定性与效率的优化策略。
摘要由CSDN通过智能技术生成

排序算法稳定性和排序总结

  • 同样值的个体不因为排序而改变次序,排序算法就是稳定的
  • 不具备稳定性的排序算法
    • 选择排序,快速排序,堆排序
    • partition的过程为什么会破坏稳定性
      • 小于等于区的数和大于区的第一个数需要做交换,导致大于区的不稳定
    • 一个直观性的规律,有跳跃性的交换的排序算法都不稳定
  • 具备稳定性的排序算法
    • 冒泡排序,插入排序,归并排序,桶排序思想下的排序
    • 要具有稳定性还有关于具体怎么处理相等的情况
  • 目前没有找到O(N*logN),额外空间复杂度O(1),又稳定的排序

在这里插入图片描述

  • 三种NlogN的算法比较
    • 一般来讲会选择快速排序,因为经过实验快排的常数最小,除非空间限制特别严重
    • 归并排序的优点时稳定性,缺点是额外空间复杂度较高
    • 堆排的优点是空间的使用很低
  • 基于比较的排序目前认为不会低于O(NlogN)
  • 排序算法中常见的坑
    • 归并排序的额外空间复杂度可以变成O(1),但是非常难,而且变完之后失去稳定性,不如用堆排——"归并排序"的内部缓存法
    • "原地归并排序"会让时间复杂度变成O(N^2)
    • 快排有一篇论文“01stable sort”可以获得稳定性,但是额外空间复杂度会变成O(N),不如用归并排序
    • 有一道题目,奇数放在数组的左边,偶数放在数组的右边,要求有稳定性,时间复杂度O(N),额外空间复杂度O(1)
      • 经典快排的partition做不到稳定,但是经典快排的partition是01标准,和奇偶问题是同一个调整策略,快排做不到,所以不知道这个问题怎么解
  • 工程上对排序的优化
    • 充分利用O(NlogN)和O(N^2)排序各自的优点
      • 大样本的情况下,总的按照快排调度
      • 小样本的情况下,直接利用插入排序(在小样本上,样本瓶颈少,插入排序的常数小,会更快)
    • 系统中sort对稳定性的考虑
      • 基础类型会使用快排
      • 自定义类型会使用归并排序,确保稳定性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值