Junior
Qual é a complexidade temporal da ordenação por bolha?
sobes.tech IA
Resposta da IA
Nos piores e médios casos, $O(n^2)$, onde $n$ é o número de elementos na lista. No melhor caso (quando a lista já está ordenada), é $O(n)$.
# Função de ordenação bubble
def bubble_sort(arr):
n = len(arr)
# Percorre todos os elementos do array
for i in range(n):
# Flag para otimização: se numa passagem não houve trocas, a lista está ordenada
swapped = False
# Os últimos i elementos já estão nos seus lugares
for j in range(0, n-i-1):
# Se o elemento atual for maior que o seguinte, trocamos
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
swapped = True
# Se numa passagem não houve trocas, terminamos
if not swapped:
break
return arr
# Exemplos de uso
# Caso pior (lista ordenada ao contrário)
arr_worst = [5, 4, 3, 2, 1]
bubble_sort(arr_worst) # Realiza n*(n-1)/2 comparações e trocas
# Caso médio (lista aleatória)
arr_average = [3, 1, 4, 1, 5, 9, 2, 6]
bubble_sort(arr_average) # Em média, a quantidade de comparações e trocas também é proporcional a n^2
# Melhor caso (lista ordenada)
arr_best = [1, 2, 3, 4, 5]
bubble_sort(arr_best) # Graças à otimização, realiza apenas uma passagem, com n comparações
| Cenário | Complexidade temporal |
|---|---|
| Caso pior | $O(n^2)$ |
| Caso médio | $O(n^2)$ |
| Melhor caso | $O(n)$ |