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

Analyzing Simple Bubble Sort Loop (Worst Case)

我得到了一个简单的伪代码算法:

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(对于第二行)。

如有任何意见,我们将不胜感激。

考虑到 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 处的外循环的第一次迭代,内循环 运行s 从 1 到 n-1 次。 => n-1

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

第i次外循环,内循环运行1到n-i次,=> n-i .

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

所以,结果将是 n-1 + n-2 + ... + 1 = (n-1)*n/2.

SO,明明最后应该是1

I understand that it's clearly a summation, here but what I don't get is why the last thing added is 2 (FOR THE SECOND LINE).

我建议您与您的 friend/professor 讨论此事,显然,他错误地通知了您。这就是我在这里解决的问题。

人们普遍认为,当数组的前n-1个元素排序完毕后,最后一个元素就已经适合了。因此,他们通常会这样假设并离开最后一步。

但是,在计算 OR 算法中,我们(通常)计算这个。您的这段代码正在此处计算。