Considérant ce pseudo-code d'une bulle:
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
Quelles seraient les idées de base que je devrais garder à l'esprit pour évaluer la complexité temporelle moyenne? J'ai déjà accompli le calcul des pires et des meilleurs cas, mais je suis coincé à réfléchir à la façon d'évaluer la complexité moyenne de la boucle interne, pour former l'équation.
L'équation du pire cas est:
dans lequel le sigma intérieur représente la boucle intérieure, et le sigma extérieur représente la boucle extérieure. Je pense que je dois changer les deux sigmas en raison de la clause "if-then-break", qui pourrait affecter le sigma externe mais aussi en raison de la clause if dans la boucle interne, qui affectera les actions effectuées pendant une boucle (4 actions + 1 comparaison si vrai, sinon juste 1 comparaison).
Pour des éclaircissements sur le terme temps moyen: cet algorithme de tri aura besoin de temps différent sur différentes listes (de même longueur), car l'algorithme peut avoir besoin de plus ou moins d'étapes dans / dans les boucles jusqu'à ce que la liste soit complètement en ordre. J'essaie de trouver une méthode mathématique (non statistique) pour évaluer la moyenne de ces rondes nécessaires.
Pour cela, je m'attends à ce que toute commande soit de la même possibilité.