【问题标题】:Is the following algorithm stable?下面的算法稳定吗?
【发布时间】:2025-12-12 10:45:01
【问题描述】:

这个算法是否稳定?我检查了稳定的含义,并在这个网站上找到了一些东西。如果我理解正确,那么当具有相同键的 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

【问题讨论】:

    标签: algorithm sorting proof


    【解决方案1】:

    是的,它很稳定。 如果你用

    实现它
    if arr[i] >= arr[i+1] then
    

    那么你就会失去稳定性。

    也是,稳定的意思是:当两个具有相同键的东西在输入中以相同的顺序出现时,而且在排序的输出中也出现。 当您首先按 key1 排序然后按 key2 排序时,您需要稳定的排序算法

    【讨论】: