考虑冒泡的伪代码:
FOR i := 0 TO arraylength(list) STEP 1
switched := false
FOR j := 0 TO arraylength(list)-(i+1) STEP 1
IF list[j] > list[j + 1] THEN
switch(list,j,j+1)
switched := true
ENDIF
NEXT
IF switched = false THEN
break
ENDIF
NEXT
在评估平均时间复杂度时,我必须牢记的基本思想是什么?我已经完成了最坏情况和最佳情况的计算,但是我一直在认真思考如何评估内循环的平均复杂度,以形成方程。
最坏的情况是:
其中,内部sigma代表内部回路,外部sigma代表外部回路。我认为由于“ if-then-break”子句可能会影响外部sigma,但由于内部循环中的if-子句,我需要同时更改两个sigma。 (如果为true,则为4个动作+ 1个比较,否则为1个比较)。
为了澄清术语“平均时间”:此排序算法在不同列表(相同长度)上将需要不同的时间,因为该算法可能需要在循环中/循环内执行更多或更少的步骤,直到列表完全井然有序。我试图找到一种数学的(非统计方式)来评估所需回合的平均值。
为此,我希望任何命令都具有相同的可能性。