分析简单的冒泡排序循环(最坏情况)

时间:2015-10-29 16:09:55

标签: algorithm sorting big-o time-complexity complexity-theory

我给出了一个简单的pseoducode算法:

for j=1 to A.length-1 //first line 
  for i =1 to A.length-j //second line 
    if A[i-1] >A[i]
      swap A[i-1] and A[i]

我告诉第二条线是这样的(最糟糕的情况:

n+(n-1)+...+2 = n(n+1)/2-1

据我所知,当第一行运行时,第二个循环运行n次,每次下一次迭代j,第二次循环运行1次(n-1) +(n-2)等。 我明白这显然是一个总结,但我不知道最后添加的内容是2(第二行)。

非常感谢任何意见。

1 个答案:

答案 0 :(得分:3)

考虑到A.length为n,你可以清楚地验证相同。我正在为你做这件事:

for j=1 to n-1 //first line 
  for i =1 to n-j //second line 
    if A[i-1] >A[i]
     swap A[i-1] and A[i]

因此,对于j = 1的外循环的第一次迭代,内循环从1到n-1次运行。 => n-1个

对于外循环的第二次迭代,内循环从1到n-2次运行。 =>的n-2

对于外循环的第i次迭代,内循环将运行1到n-i次,=> n-i。

外循环的最后一次迭代将在j = n-1时,内循环将运行i = 1到n-(n - 1)= 1次。

因此,结果将是n-1 + n-2 + ... + 1 =(n-1)* n / 2的总和。

所以,最后应该显然是1。

  

我明白这显然是一个总结,但这是我得不到的   这就是为什么最后添加的是2(FOR THE SECOND LINE)。

我建议你和你的朋友/教授谈谈这个问题,他显然已经错误地通知了你。这是我在这里解决的问题。

人们通常认为,当阵列的前n-1个元素已经排序时,最后一个元素已经适合确切的位置。因此,他们通常会假定这一点并离开最后一步。

但是,在计算OR算法中,我们(通常)计算它。你的这段代码就是在这里计算的。