排序算法笔记|青训营笔记

56 阅读2分钟

如何衡量一个排序算法? 排序算法的种类很多,在没对排序有了解时,我曾的天真的以为,直接选出其中一个最快的不就完事了么?但是真实情况会复杂一些,因为一个排序能从很多方便来衡量,并不能简单的拿效率说事。

  1. 时间复杂度 这是衡量一个排序算法最直观的感受,我们平时说某一个排序的复杂度也都是平均时间复杂度,但针对排序数据的不同,又会出现最坏、最好时间复杂度的情况,所以我们要搞明白,什么情况是什么复杂度。还有就是排序里经常会用到的操作就是交换位置和赋值,很明显赋值的效率是优于交换位置的,这也需要在复杂度之外考虑。

  2. 额外的内存 完成这个排序算法,需要开辟额外多少的辅助空间,也就是说能不能在原数组上直接原地排序,这个也是需要衡量的一个因素,毕竟快和省才是数据结构与算法存在的意义。

  3. 稳定性 虽然说排序算法最后都是按照升序或排序排列,但相同的值在排序后,位置的前后关系是否发生了改变这也是衡量的一个标准。例如[3, 1(1号), 2, 1(2号)]排序后都是[1, 1, 2, 3],但1号和和2号是否在排序之后位置发生了改变,这个也很重要。因为在真实场景,我们可能是针对某个对象的某个key进行排序,如果它们key相同,稳定的排序算法就能保持原有的次序不变。