冒泡排序算法找时间复杂度

时间:2016-10-14 05:31:01

标签: algorithm sorting bubble-sort

我试图找到冒泡排序的时间复杂度

n=length[A]
for j <- n-1 to 1
for i <- 0 to j-1
if A[i]>a[i+1]
temp=A[i]
A[i]=A[i+1]
A[i+1]=temp

return A 

请任何人都可以帮助谢谢

1 个答案:

答案 0 :(得分:0)

  • 在第1行中,我们将数组的长度分配给n这样的恒定时间
  • 在第2行中,我们有一个for循环,每次迭代将j减1,直到j = 1,总共迭代n-2次。
  • 在第一个for循环中,我们有第二个for循环,每次迭代将i递增1,直到i = j-1并且将迭代j-1次。在内部for循环的每次迭代中,我们都有第4,5,6,7行,这些只是赋值和数组访问,总共花费了恒定时间。
  • 我们可以通过以下方式考虑两个for循环:对于外部for循环的每次迭代,内部for循环将迭代j-1次。
  • 因此,在外部for循环的第一次迭代中,我们有j = n-1。这意味着内部for循环将迭代(n-1)-1 =(n-2)次。然后在外部for循环的第二次迭代中,我们有j = n-2,因此内部for循环将迭代(n-2)-1 =(n-3)次,依此类推。我们这样做直到j = 1。
  • 我们将得到等式:(n-2)+(n-3)+ ... + 2 + 1这是内部循环在整个算法执行后迭代的总次数。我们知道1 + 2 + ... + n-1 + n = n(n-1)/ 2所以我们的表达式可以简化为:n(n-1)/ 2 - (n-1)-n = n(n-1)/ 2 -2n + 1 = O(n ^ 2)。
  • 由于我们的内部for循环将迭代O(n ^ 2)次,并且在每次迭代中执行常量工作,这意味着我们的运行时将是O(cn ^ 2)其中c是由行完成的常量工作量4,5,6,7。将O(cn ^ 2)与第1行(O(1)结合起来我们得到O(cn ^ 2)+ O(1),它只是O(n ^ 2)。
  • 因此BubbleSort的运行时为O(n ^ 2)。

如果你仍然感到困惑,那么这可能会有所帮助:https://www.youtube.com/watch?v=Jdtq5uKz-w4