我怎么知道算法是否稳定?

时间:2016-08-22 17:32:47

标签: algorithm sorting

我获得了一系列排序算法来分析并确定它们是否稳定。 我知道如果具有相同键的两个对象在排序输出中以与输入未排序数组中出现的相同顺序出现,则算法是稳定的。 但我不知道如何确定代码。我应该使用什么标准?

谢谢

3 个答案:

答案 0 :(得分:0)

我刚刚解决了这个问题,并且想知道是否有更好的方法来解决。改善它的唯一方法是使用更好的算法搜索重复项。这时,我只为慢速遍历数组中的每个元素遍历数组。无论如何,要回答您的问题,如果要排序的数组不是很大,应该创建一个int数组。用a [i] = i初始化它。在对原始数组进行排序时,也对这一数组进行排序。这将为您提供原始数组的初始位置。然后在原始数组中搜索重复项,如果找到任何重复项,并且左侧重复项的新位置大于右侧重复项的新位置,则数组不稳定。可能有更好的方法,但这是我想到的第一个解决方案。课堂上加油打气,祝你好运。

答案 1 :(得分:0)

如果您真的想一路实现和减少算法分析,则可以将整数数组存储为具有键valueorder的结构。

  • 首先迭代您的数组,然后确定order。每次看到相同的数字,都将顺序加1。
  • 修改您的排序算法以读取element.value。修改方式应该很简单。
  • 排序数组。
  • 检查排序数组中的订单。如果算法稳定,还应该对每个值的顺序进行排序。

这可能不是您要求他们做的方式,也没有优化的方法,但是如果您要演示,这是可行的。


此答案是@Darka Bakula答案的变体。

答案 2 :(得分:0)

当有相同数量的元素运行时,模拟(心理上)算法的工作,并弄清算法是否会对它们进行加扰。另外,请看一下比较,看看如果用非严格等式代替严格等式,反过来会发生什么情况。