指定if语句的完成次数[冒泡排序算法]

时间:2015-01-02 14:07:25

标签: algorithm sorting

1. for i=1 to n-1 do
2.    for j=1 to n-i do
3.       if a[j]>A[j+1] then
4.          Change A[j] with A[j+1]


告诉第3行(if语句)中的指令将完成多少次。

我认为这是第一个没有修改的主要气泡排序算法。
首先,我将考虑三种情况:最佳,平均和最差。

最佳方式中,if语句将完成n-1次。数组中的数据已经被隔离。完成数组和结束算法就足够了。

最差的情况下,if语句将完成:



<a href="http://www.codecogs.com/eqnedit.php?latex=\sum_{i=1}^{n-1}\tfrac{n(n-1)}{2}" target="_blank"><img src="http://latex.codecogs.com/gif.latex?\sum_{i=1}^{n-1}\tfrac{n(n-1)}{2}" title="\sum_{i=1}^{n-1}\tfrac{n(n-1)}{2}" /></a>
&#13;
&#13;
&#13;
倍。数组中的数据不会被隔离,每个位置都会被交换。

平均值的情况下,if语句将完成:

&#13;
&#13;
<a href="http://www.codecogs.com/eqnedit.php?latex=\sum_{i=1}^{n-1}\tfrac{n(n-1)}{4}" target="_blank"><img src="http://latex.codecogs.com/gif.latex?\sum_{i=1}^{n-1}\tfrac{n(n-1)}{4}" title="\sum_{i=1}^{n-1}\tfrac{n(n-1)}{4}" /></a>
&#13;
&#13;
&#13;
次?我认为,因为它将是最坏的情况除以2。

我想请你检查我是否正确思考。如果你认为我错了,请纠正我。

问候,

2 个答案:

答案 0 :(得分:1)

在代码中没有检查 - 如果数组已经排序 - 所以if语句的数量总是

Q = 1 + 2 + 3 + ... + n-1  = n * (n-1) / 2

不是Wiki code检查

   ....    
   until not swapped

并且可以在最佳情况下执行(n-1) if-statements(排序数组)

答案 1 :(得分:0)

if语句将始终执行完全相同的次数,大致为n ^ 2/2。

声明4的执行频率,这是一个有趣的问题。特别是对于平均数,数学会很有趣。