Considerando este pseudocódigo de un bubbleort:
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
¿Cuáles serían las ideas básicas que tendría que tener en cuenta para evaluar la complejidad temporal promedio? Ya logré calcular el peor y el mejor de los casos, pero estoy atascado deliberando cómo evaluar la complejidad promedio del ciclo interno, para formar la ecuación.
La peor ecuación del caso es:
en el que el sigma interno representa el bucle interno, y el sigma externo representa el bucle externo. Creo que necesito cambiar ambas sigmas debido a la cláusula "if-then-break", que podría afectar la sigma externa pero también debido a la cláusula if en el bucle interno, que afectará las acciones realizadas durante un bucle (4 acciones + 1 comparación si es verdadera, de lo contrario solo 1 comparación).
Para aclarar el término tiempo promedio: este algoritmo de clasificación necesitará un tiempo diferente en diferentes listas (de la misma longitud), ya que el algoritmo podría necesitar más o menos pasos a través / dentro de los bucles hasta que la lista esté completamente en orden. Trato de encontrar una forma matemática (no estadística) de evaluar el promedio de esas rondas necesarias.
Para esto espero que cualquier orden sea de la misma posibilidad.