排序是一种算法,它按特定顺序(升序或降序)排列给定列表的元素。
排序算法根据以下基础进行分类 –
- 按比较次数:
基于比较的排序算法通过键比较操作检查列表的元素,并且对于大多数输入至少需要 O(n log n) 次比较。在这种方法中,算法根据比较次数进行分类。对于基于比较的排序算法,最佳情况行为是 O(n log n),最坏情况行为是 O(n2)。例如——计数排序、桶排序、基数排序等。 - 按掉期次数:
在这种方法中,排序算法按交换次数(数字的位置交换,也称为倒置)进行分类。 - 按内存使用:
一些排序算法是“就地”的,它们需要 O(1) 或 O(log n) 内存来创建用于临时排序数据的辅助位置。 - 通过递归:
排序算法要么是递归的(例如 – 快速排序),要么是非递归的(例如 – 选择排序和插入排序),并且有一些算法同时使用两者(例如 – 合并排序)。 - 按稳定性:
如果具有相等值的两个元素在输出中以与输入中相同的顺序出现,则排序算法是稳定的。排序算法的稳定性可以通过它如何处理相等的元素来检查。稳定算法保留相等元素的相对顺序,而不稳定排序算法则不会。换句话说,稳定排序保持两个相等元素的位置彼此相似。例如 – 插入排序、冒泡排序和基数排序。 - 按适应性:
在一些排序算法中,基于预排序输入的复杂度变化,即输入的预排序数组影响运行时间。考虑到这种适应性的算法被称为自适应算法。例如——快速排序是一种自适应排序算法,因为快速排序的时间复杂度取决于初始输入序列。如果输入已经排序,则时间复杂度变为 O(n^2),如果输入序列未排序,则时间复杂度变为 O(n logn)。一些自适应排序算法是:冒泡排序、插入排序和快速排序。另一方面,一些非自适应排序算法是:选择排序、合并排序和堆排序。
- 内部排序:
在排序期间专门使用主存储器的排序算法称为内部排序算法。这种算法假设对所有内存进行高速随机访问。使用此排序功能的一些常见算法是:冒泡排序、插入排序和快速排序。 - 外部排序:
在排序过程中使用外部存储器的排序算法属于这一类。它们比内部排序算法慢。例如归并排序算法。它对每个适合 RAM 的块进行排序,然后将已排序的块合并在一起。