排序问题的稳定性及汇总

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、排序的稳定性

含义:相同的数字排序完之后顺序也不变。例如数组[ 1 1 1_1 11,2, 1 2 1_2 12,3,4]排序完之后变为[ 1 1 1_1 11, 1 2 1_2 12,2,3,4],则该排序稳定,变为[ 1 2 1_2 12, 1 1 1_1 11,2,3,4]则该排序不稳定。

选择排序:不稳定
冒泡排序:稳定(相等时不交换)
插入排序:稳定(相等时不交换)
归并排序:稳定(两个指针指向数字的值相等时先拷贝左边的数字)
快速排序:不稳定(partition过程破坏了稳定性)
堆排序:不稳定(第一步把数组变成大根堆时就破坏了稳定性)
桶排序:计数排序和基数排序都稳定

二、各种排序算法总结

时间复杂度额外空间复杂度稳定性
选择排序法 O ( N 2 ) O(N^2) O(N2) O ( 1 ) O(1) O(1) × \times ×
冒泡排序法 O ( N 2 ) O(N^2) O(N2) O ( 1 ) O(1) O(1) ✓ \checkmark
插入排序法 O ( N 2 ) O(N^2) O(N2) O ( 1 ) O(1) O(1) ✓ \checkmark
归并排序法 O ( N ∗ l o g N ) O(N*logN) O(NlogN) O ( N ) O(N) O(N) ✓ \checkmark
快速排序法(随机选值) O ( N ∗ l o g N ) O(N*logN) O(NlogN) O ( l o g N ) O(logN) O(logN) × \times ×
堆排序 O ( N ∗ l o g N ) O(N*logN) O(NlogN) O ( 1 ) O(1) O(1) × \times ×

无特殊要求情况下一般使用快速排序法,因常数时间最短。
1)目前不存在时间复杂度低于 O ( N ∗ l o g N ) O(N*logN) O(NlogN)的基于比较的排序算法
2)时间复杂度为 O ( N ∗ l o g N ) O(N*logN) O(NlogN)且稳定的排序算法中,额外空间复杂度不低于 O ( N ) O(N) O(N)

工程上对排序的改进

1)充分利用 O ( N ∗ l o g N ) O(N*logN) O(NlogN) O ( N 2 ) O(N^2) O(N2)各自的优势。比如样本量小时,用插入排序,样本量大时用快速排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值