algorithm - 下面的算法稳定吗?

标签 algorithm sorting proof

这个算法稳定不?我检查了稳定的含义并在此站点上找到了一些东西。如果我理解正确,当具有相同键的 2 个事物以相同的顺序出现在输入中以及排序的输出中时,某些事物(我们谈论排序算法)是稳定的。

以下算法是众所周知的冒泡排序。 我会说它是稳定的,因为我看不到 2 个相等的元素曾经在那里交换过,因此它必须是稳定的算法。 我是对的吗?这足以作为“证据”吗?

Input: Array arr with n integers
Output: Array arr sorted upward
repeat
   swapped = false
   for i = 1 to n-1 do
      if arr[i] > arr[i+1] then
         temp = arr[i]
         arr[i] = arr[i+1]
         arr[i+1] = temp
         swapped = true
      end if
   end for
until not swapped

最佳答案

是的,它很稳定。 如果你实现它

if arr[i] >= arr[i+1] then

那么你就会失去稳定性。

另外,是的,稳定意味着:当具有相同键的 2 个事物在输入中以相同的顺序出现时,也在排序的输出中出现。 你需要稳定的排序算法,当你先按 key1 排序,然后按 key2 排序

关于algorithm - 下面的算法稳定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37777270/

相关文章:

r - 在 R 中排序未正确排序数字

proof - 在 Idris REPL 中使用 cong 进行实验

algorithm - 与某种模式匹配的快速文件系统路径(但没有通配符)

algorithm - 通过从不生成排列及其逆排列来生成所有排列的一半?

algorithm - 到所有节点的非循环路径

php - 求出两个不同长度数组的欧式距离

c++ - 计算堆排序和插入排序中的复制和比较次数

python - 使 python 排序/比较与 GNU 排序相同

算法证明 - 从 n 位数字中删除 k 位数字后构建最小数字

algorithm - 二叉树的数学证明