算法知识点-排序算法总结

本文探讨了在面对不同需求时如何选择排序算法,如优先稳定性选择归并排序,优先空间复杂度则推荐堆排序。对于追求速度,随机快速排序是不错的选择。Java系统中,基础类型使用快速排序,非基础类型则采用归并排序以确保稳定性。在特定情况下,如元素数量小于60,会选择插入排序。同时,文章还揭示了一些面试中关于快速排序稳定性的坑爹问题。
摘要由CSDN通过智能技术生成

排序算法的选择,

  1. 优先稳定性,选择归并排序
  2. 优先空间复杂度,堆排序
  3. 不考虑各种,就要最快,随机快排,常数时间项最少。

归并排序有内部缓存法,会导致没有稳定性,不在乎稳定性,就直接用堆。同样省空间。
插入排序,比原地归并好很多,原地归并是垃圾,会导致归并时间复杂度变为N平凡
快速排序可以改成稳定版本,但是是01 stable sort,没什么用,会导致数据要求限制很多。

坑爹面试题

在这里插入图片描述

partition就大于小于,就是01 partition。原本的partition做不到有序,只能说你快排变成稳定的。那面试官就是故意为难。
直接问为什么快排不稳定呢?

能做到,要一定限制,直接说01 stable sort才行。没必要看。故意压价的面试题。

Java系统的排序实现

系统实现,发现是基础类型,稳定性没用,直接用快排。如果不是基础类型,会用归并保证稳定性

Java快排系统实现

快排L到R不够60个数,直接插入排序。

快排,归并,heapSort,调度优秀,但是常数项很大。

插入排序常数项很低,调度不好,所以是平方级别。

小样本量常数项的优势,就直接用插入排序。
在这里插入图片描述

时间复杂度 额外空间复杂度 稳定性
选择排序 O ( N 2 ) O(N^2) O(N2) O ( 1 ) O(1) O(1)</
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值