插入,选择,泡沫分选分析与倒置罗伯特塞奇威克

时间:2012-11-02 12:25:01

标签: algorithm sorting

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

  

属性1:插入排序和冒泡排序使用线性数字   最多为常数的文件的比较和交换   对应于每个元素的反转。

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

  

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

我对上述属性的疑问是

  1. 我无法区分属性1和属性2?任何人都可以在这里解释一下吗?

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

  3. 如果用例子解释会很好。

    感谢您的时间和帮助

1 个答案:

答案 0 :(得分:3)

因此,排序顺序为<的倒置有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是次序{{1}}。 (你也可以在相反的方向上进行冒泡排序,在这种情况下,开头的最大元素会慢慢移动到另一端。)