📜  DAA稳定排序

📅  最后修改于: 2020-12-10 03:59:21             🧑  作者: Mango

稳定排序

如果两个具有相同关键字的对象在输入输出中的顺序与在输入未排序数组中出现的顺序相同,则该排序算法被认为是稳定的。

一些排序算法本质上是稳定的,例如插入排序,合并排序和冒泡排序等。

排序算法不稳定,例如快速排序,堆排序等。

稳定排序的另一个定义:

稳定排序是一种保留输入集原始顺序的排序,其中比较算法不能区分两个或多个项目。稳定排序将保证在输出中保留具有相同等级的原始数据顺序。

就地排序算法:

  • 就地排序算法直接修改作为输入接收的列表,而不是创建随后修改的新列表。
  • 在此排序中,它使用少量的额外空间来操纵输入集。换句话说,在算法仍在执行的同时,将输出放置在正确的位置,这意味着输入将在运行时被所需的输出覆盖。
  • 就地排序算法仅通过替换或交换元素来更新输入。
  • 非原位算法有时称为非原位或非原位算法。
  • 一个算法只能有一个恒定的额外空间,通常计算所有内容,包括函数调用和指针。该空间为O(log n)。

注意:

  • 冒泡排序,插入排序和选择排序是就地排序算法。因为只需要交换输入数组中的元素。
  • 冒泡排序和插入排序可以作为稳定算法应用,而选择排序则不能(无需重大修改)。
  • 合并排序是一种稳定的算法,但不是就地算法。它需要额外的阵列存储。
  • Quicksort不稳定,但是是就地算法。
  • 堆排序是就地算法,但不稳定。