【问题标题】:bubble sort algorithm find time complexity冒泡排序算法求时间复杂度
【发布时间】:2016-10-14 05:31:01
【问题描述】:

我正在尝试找出冒泡排序的时间复杂度

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 

请大家帮忙谢谢

【问题讨论】:

  • 不要放截图
  • n=length[A] for j a[i+1] temp=A[i] A[i]=A[i+1] A[i+1]=临时返回 A
  • 我已经编辑了问题,请回答
  • 冒泡排序时间复杂度定义为 O(n^2)。你到底想在这里达到什么目的?

标签: algorithm sorting bubble-sort


【解决方案1】:
  • 在第 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

【讨论】: