0x05 排序算法学习笔记
排序算法(Sorting algorithm)是一类能够将输入的一系列数据按照某种特定排序方式进行排列的算法的统称,其有多种实现,各种实现方式多种多样,性质也大多不同。
分类
排序算法可以按以下方式分类:
- 计算复杂度
就数据规模的大小变化,讨论最优、最差和平均情况的表现。对于典型的串行(通俗的说,即单线程算法)排序算法,较优的复杂度是 \(O(n \log n)\),并行(即多线程算法)排序的时间复杂度是 \(O(\log^2 n)\),较差是 \(O(n^2)\)。串行排序的理想最优复杂度是 \(O(n)\),但这在一般情况下是不可能的。最优并行排序复杂度是 \(O(\log n)\)。 - 内存使用情况(以及其他计算机资源的使用情况)
有一些排序算法是“原地”算法。严格来说,除了要排序的项目之外,原地排序仅需要 \(O(1)\) 内存;有时 \(O(\log n)\) 额外的内存也被认为是“原地”。 - 递归:一些算法要么是递归的,要么是非递归的,而另一些算法可能是两者兼而有之(例如,归并排序)。
- 稳定性:稳定的排序算法维护具有相同键(即值)的记录的相对顺序。
- 基于比较。比较排序仅通过使用比较运算符比较两个元素来检查数据。
- 一般方法:插入、交换、选择、合并等。交换排序包括冒泡排序和快速排序。选择排序包括循环排序和堆排序。
- 可否并行。本讨论的其余部分几乎完全集中于串行算法并假设串行操作。
- 适应性:输入的预排序是否影响运行时间。考虑到这一点的算法被认为是自适应的。
- 在线:在线算法(例如插入排序)可以对恒定的输入流进行排序。
总览
这里列举了 OI 中常用的一些比较算法。


要不是初赛谁看希尔排序
浙公网安备 33010602011771号