Considerando esse pseudo-código de um conjunto de bolhas:
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
Quais seriam as idéias básicas que eu teria em mente para avaliar a complexidade média de tempo? Já concluí o cálculo dos piores e melhores casos, mas estou decidido a avaliar como a complexidade média do loop interno, para formar a equação.
A pior equação de caso é:
em que o sigma interno representa o loop interno e o sigma externo representa o loop externo. Eu acho que preciso alterar os dois sigmas devido à cláusula "se-então-quebrar", que pode afetar o sigma externo, mas também devido à cláusula se no loop interno, que afetará as ações realizadas durante um loop (4 ações + 1 comparação, se verdadeira, ou apenas 1 comparação).
Para esclarecimentos sobre o termo tempo médio: esse algoritmo de classificação precisará de um tempo diferente em listas diferentes (do mesmo tamanho), pois o algoritmo pode precisar de mais ou menos etapas através dos / dentro dos loops até que a lista esteja completamente em ordem. Tento encontrar uma maneira matemática (não estatística) de avaliar a média das rodadas necessárias.
Por isso, espero que qualquer ordem tenha a mesma possibilidade.