计算大 O 交换、计算和比较

Calculating big O swaps, calculations, and comparisons

查看下面的代码:

Algorithm sort

Declare A(1 to n)

n = length(A)

for i = 1 to n
    for j = 1 to n-1 inclusive do
       if A[i-1] > A[i] then
          swap( A[i-1], A[i] )
       end if
  next j
next i

我会说有:

评分方案给出的答案:

算法评价

比较

唯一的比较出现在 j 循环中。 因为这个循环总共会迭代 n^2 次,它会执行 恰好 n^2

数据交换

注意:计算可能包括赋值操作,但这些不会影响总时间,因此请忽略

标记概述:

编辑:从mark scheme可以看出,我预计要数:

谁能解释一下这些答案是如何得出的?

谢谢!

这是我对标记方案的看法,明确标记了他们正在计算的操作。他们似乎在计算作业(但很方便地忘记了需要 2 或 3 个作业才能进行交换)。这解释了为什么他们计算增量而不是 [i-1] 索引。

计算交换

i loop runs n times
    j loop runs n-1 times (~n^2-n)
        swap (happens n^2 times)            n^2

计算加法 (+=)

i loop runs n times 
    j loop runs n-1 times (~n^2)
        increment j (happens n^2 times)     n^2
    increment i (happens n times)           n

sum:                                        2n^2 + n