algorithm - 什么是排序算法的稳定性,为什么它很重要?

标签 algorithm sorting language-agnostic stability

我很好奇,为什么稳定性在排序算法中重要或不重要?

最佳答案

如果具有相同键的两个对象出现在排序输出中的顺序与它们出现在要排序的输入数组中的顺序相同,则称排序算法是稳定的。有些排序算法本质上是稳定的,如插入排序、归并排序、冒泡排序等,而有些排序算法则不稳定,如堆排序、快速排序等。

背景:“稳定”排序算法使具有相同排序键的项目按顺序排列。假设我们有一个包含 5 个字母的单词列表:

peach
straw
apple
spork

如果我们仅按每个单词的第一个字母对列表进行排序,那么稳定排序会产生:

apple
peach
straw
spork

不稳定排序算法中,strawspork 可以互换,但在稳定算法中,它们保持相同的相对位置(也就是说,由于 straw 在输入中出现在 spork 之前,所以它在输出中也出现在 spork 之前)。

我们可以使用此算法对单词列表进行排序:按第 5 列稳定排序,然后是第 4 列,然后是第 3 列,然后是第 2 列,然后是第 1 列。 最后,它会被正确排序。说服自己。 (顺便说一句,该算法称为基数排序)

现在回答您的问题,假设我们有一个名字和姓氏列表。我们被要求“按姓氏,然后按名字”排序。我们可以先按名字排序(稳定或不稳定),然后按姓氏排序。在这些排序之后,列表主要按姓氏排序。但是,如果姓氏相同,则按名字排序。

您不能以相同的方式堆叠不稳定的排序。

关于algorithm - 什么是排序算法的稳定性,为什么它很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1517793/

相关文章:

algorithm - K 个负边 - 单源最短路径

algorithm - 将 u32 映射到指针的低开销方案

r - 在R中对大型矩阵的每一行进行排序的最快方法

performance - 是否有比快速排序更快的专门算法来重新排序数据 ACEGBDFH?

sql - SQL中K-mer/n-gram的实现

c - 瓦片合并算法 2048 游戏

python - 对(字符串, float )的字典进行排序时,字符串索引超出范围

java - 这是按标题、位置排序然后使用比较器排序的正确方法吗?

templates - 我应该使用什么通用模板处理器?

algorithm - 范围内的整数赋值