📜  分类算法的分类

📅  最后修改于: 2021-04-17 18:36:58             🧑  作者: Mango

排序是一种算法,它以特定顺序(升序或降序)排列给定列表的元素。

排序算法的分类依据如下:

  1. 按比较数:
    基于比较的排序算法通过键比较操作检查列表的元素,并且对于大多数输入至少需要O(n log n)比较。在这种方法中,基于比较次数对算法进行分类。对于基于比较的排序算法,最佳情况下的行为为O(n log n),最坏情况下的行为为O(n2)。例如–计数排序,存储桶排序,基数排序等。
  2. 按掉期数:
    在这种方法中,排序算法按交换次数(将位置交换为数字,也称为反转)进行分类。
  3. 按内存使用情况:
    一些排序算法是“就地”的,它们需要O(1)或O(log n)内存来创建辅助位置,以临时对数据进行排序。
  4. 通过递归:
    排序算法是递归的(例如,快速排序)或非递归的(例如,选择排序和插入排序),并且有些算法使用这两种算法(例如,合并排序)。
  5. 按稳定性:
    如果两个相等值的元素在输出中的顺序与输入中的顺序相同,则排序算法是稳定的。排序算法的稳定性可以通过如何对待相等元素来检查。稳定的算法会保留相等元素的相对顺序,而不稳定的排序算法则不会。换句话说,稳定的排序可保持两个相等元素的位置彼此相似。例如–插入排序,冒泡排序和基数排序。
  6. 通过适应性:
    在一些分类算法中,复杂度会根据预分类的输入而变化,即输入的预分类阵列会影响运行时间。已知将这种适应性考虑在内的算法是自适应算法。例如–快速排序是一种自适应排序算法,因为快速排序的时间复杂度取决于初始输入序列。如果输入已经排序,则时间复杂度变为O(n ^ 2),如果输入序列未排序,则时间复杂度变为O(n logn)。

    一些自适应排序算法是:气泡排序,插入排序和快速排序。另一方面,一些非自适应排序算法是:选择排序,合并排序和堆排序。

  7. 内部排序:
    在排序过程中专门使用主内存的排序算法称为内部排序算法。这种算法假定对所有内存进行高速随机访问。使用此排序功能的一些常见算法为:冒泡排序,插入排序和快速排序。
  8. 外部分类:
    在排序过程中使用外部存储器的排序算法属于此类别。它们比内部排序算法要慢。例如合并排序算法。它对每个都适合RAM的块进行排序,然后将排序后的块合并在一起。