Sobes.tech
Junior
165

Care este complexitatea temporală a sortării cu bule?

Răspuns de la AI

sobes.tech AI

În cele mai rele și medii cazuri, complexitatea temporară este $O(n^2)$, unde $n$ este numărul de elemente din listă. În cel mai bun caz (când lista este deja sortată), este $O(n)$.

# Funcție de sortare cu bule
def bubble_sort(arr):
    n = len(arr)
    # Parcurgem toate elementele array-ului
    for i in range(n):
        # Flag pentru optimizare: dacă în o trecere nu au fost schimbări, lista este sortată
        swapped = False
        # Ultimele i elemente sunt deja la locul lor
        for j in range(0, n-i-1):
            # Dacă elementul curent este mai mare decât următorul, le schimbăm
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        # Dacă în o trecere nu au fost schimbări, ieșim
        if not swapped:
            break
    return arr

# Exemple de utilizare
# Cazul cel mai rău (listă sortată invers)
arr_worst = [5, 4, 3, 2, 1]
bubble_sort(arr_worst) # Se efectuează n*(n-1)/2 comparații și schimbări

# Cazul mediu (listă aleatorie)
arr_average = [3, 1, 4, 1, 5, 9, 2, 6]
bubble_sort(arr_average) # În medie, numărul de comparații și schimbări este proporțional cu n^2

# Cazul cel mai bun (listă sortată)
arr_best = [1, 2, 3, 4, 5]
bubble_sort(arr_best) # Datorită optimizării, se face doar o singură trecere, cu n comparații
Scenariu Complexitate temporară
Cazul cel mai rău $O(n^2)$
Cazul mediu $O(n^2)$
Cazul cel mai bun $O(n)$