【问题标题】:insertion, selection, bubble sorting analysis with inversion Robert Sedgewick插入、选择、带反演的冒泡排序分析 Robert Sedgewick
【发布时间】:2012-11-02 12:25:00
【问题描述】:

我正在阅读 Robertsedwick 的 C++ 排序算法

属性 1:插入排序和冒泡排序使用线性数 比较和交换最多具有恒定数量的文件 每个元素对应的反转。

在另一种类型的部分排序文件中,我们可能已经将一些元素附加到排序文件中,或者编辑了排序文件中的一些元素以更改它们的 kesy。插入排序是此类文件的有效方法;冒泡排序和选择排序不是。

属性 2:插入排序使用线性数量的比较和 交换最多具有恒定数量元素的文件 超过一定数量的相应反转。

我对上述属性的问题是

  1. 我无法区分属性 1 和属性 2?谁能在这里解释一下?

  2. 基于以上属性 2,作者提到插入排序是最好的,而不是冒泡排序和选择排序?

如果能举例说明就好了。

感谢您的时间和帮助

【问题讨论】:

    标签: algorithm sorting


    【解决方案1】:

    因此,排序顺序为< 的倒置存在i < ja[i] > a[j]

    • 属性 1. 考虑序列2 1 4 3 6 5 8 7 10 9...。每个元素相对于其左侧或右侧的邻居都是无序的,但相对于所有其他元素是有序的。所以每个元素都有一个恒定数量的反转,在这种情况下是一个。该属性表示所有元素都可能有点乱序。

      冒泡排序和插入排序都将在线性时间内运行。冒泡排序将只需要一次通过来更正顺序,因为它交换相邻元素并通过另一次确认。插入排序只需对每个元素进行一次比较和交换。

    • 属性2。这个属性更强。除了能够让所有元素有点乱序之外,现在你还可以拥有一些非常乱序的元素。考虑与之前相同的序列,但最小元素和最大元素移动到相反的两端:n 2 4 3 6 5 8 7 10 9...1。现在1n 相对于所有其他元素都出现故障了。

      插入排序仍将在线性时间内执行。和以前一样,大多数元素只需要一些比较和交换,但有一些可以接受n 比较和交换。在这个例子中,第一个 n-1 元素需要进行几次比较和交换(好的,所以 2 只需要一个)才能到位,最后一个需要 n-1 比较和交换 -- 2*(n-1) + 1*(n-1) 是顺序n

      在这个例子中,冒泡排序要困难得多。每次通过只能将1 向后移动一步。因此,至少需要(n-1) 传递,其中(n-1) 比较在完成之前完成——这是乘法(n-1)*(n-1) 是顺序n^2。 (你也可以反方向运行冒泡排序,在这种情况下,开头最大的元素会慢慢移动到另一端。)

    【讨论】:

      猜你喜欢
      • 2016-06-29
      • 2015-04-25
      • 2012-10-04
      • 2019-05-10
      • 2015-02-14
      • 2018-02-08
      相关资源
      最近更新 更多