01 / 15
Lógica de Programação · Sem 11 · Dia 2 (Aulas 3 e 4)

Ordenar &
Decifrar

Os maiores valores borbulham até o fim — depois extraímos média, máximo e mínimo em uma única varredura.

ProfessorGuilherme Antunes CursoTécnico em Desenvolvimento de Sistemas Duração100 minutos (Aula 3 + Aula 4)
02 / 15
Objetivos do Dia

Ao final, você será capaz de.

01

A3Entender o princípio do Bubble Sort: trocas adjacentes em sucessivas passadas

02

A3Codificar e rastrear o algoritmo em Python, com loops aninhados e troca de valores

03

A4Usar acumuladores para calcular a média e sentinelas para guardar o melhor até agora

04

A4Extrair máximo, mínimo e média de um vetor em uma única passada

03 / 15
Aula 3 Ponto de partida

Como o computador organiza uma lista?

Você tem um vetor com 5 notas, fora de ordem:

5
1
4
2
8

Como deixá-las em ordem crescente de forma automática? Existem vários algoritmos — começamos pelo mais simples e didático: o Bubble Sort.

A ideia central: comparar pares vizinhos e trocar quando estão fora de ordem. Repete-se até nenhum precisar de troca.

Resultado esperado após o algoritmo:

1
2
4
5
8

O nome "bolha" vem da imagem dos maiores valores subindo — borbulhando — para o final do vetor a cada passada.

04 / 15
Aula 3 Como funciona

Rastreando o Bubble Sort

Vetor inicial [5, 1, 4, 2, 8]. Compare cada par adjacente, da esquerda para a direita, e troque se o da esquerda for maior.

Passada 1 — após percorrer todo o vetor
1
4
2
5
8
Passada 2
1
2
4
5
8
Passada 3 — vetor ordenado
1
2
4
5
8
🧠 O padrão: a cada passada, o maior valor restante "borbulha" para a posição final correta. Depois da k-ésima passada, as k últimas posições já estão definitivamente ordenadas.
05 / 15
Aula 3 Construindo o algoritmo

Anatomia em 4 passos

1

Laço externo

Controla quantas passadas faremos pelo vetor — no pior caso, N − 1 passadas.

2

Laço interno

Percorre os pares adjacentes: compara v[j] com v[j+1], ao longo da passada.

3

Comparação

Se v[j] > v[j+1], eles estão na ordem errada e precisam ser trocados.

4

Troca

Usa uma variável auxiliar (temp) para não perder o valor durante a troca.

🧠 Por que temp? Se você fizer v[j] <- v[j+1] direto, perde o valor original de v[j] antes de copiar para v[j+1]. A variável temporária é o que segura o valor durante a troca.
06 / 15
Aula 3 Implementação

Bubble Sort em Python

v = [5, 1, 4, 2, 8]
n = len(v)

for i in range(n - 1):           # N-1 passadas
    for j in range(n - 1 - i):   # pares
        if v[j] > v[j+1]:
            temp   = v[j]        # 🔑 guarda
            v[j]   = v[j+1]      # sobrescreve
            v[j+1] = temp        # restaura

print(v)
[1, 2, 4, 5, 8]

# Detalhes:
#  - range(n-1) gera
#    0..N-2 (N-1 passadas)
#  - range(n-1-i) reduz
#    porque os últimos i
#    já estão no lugar
#  - temp é a "ponte"
#    da troca
#
# Atalho Python:
#   v[j], v[j+1] = \
#     v[j+1], v[j]
#
# Pior caso: O(N²)
07 / 15
Aula 3 Análise de custo

Por que O(N²) assusta?

O Bubble Sort tem dois laços aninhados, cada um podendo varrer até N elementos. No pior caso, ele faz N × N = N² operações.

Para entender a escala:

  • 10 itens → ~100 comparações
  • 100 itens → ~10.000 comparações
  • 1.000 itens → ~1.000.000 comparações
  • 10.000 itens → ~100.000.000 comparações

Por isso o Bubble Sort é educativo, não profissional. Em produção, usamos Quick Sort, Merge Sort, Tim Sort — todos com complexidade média O(N log N).

🧠 Boa notícia: apesar de lento em escala, o Bubble Sort é simples de implementar e fácil de rastrear. Para fins didáticos e para vetores pequenos (até umas centenas de elementos), ele é perfeitamente aceitável.
⚠️ Otimização possível: se em uma passada nenhuma troca acontecer, o vetor já está ordenado. Adicionar uma flag trocou permite encerrar mais cedo no melhor caso (O(N)).
08 / 15
Pause e responda

Após a primeira passadaqual o estado?

Aplicando uma passada completa do Bubble Sort no vetor [3, 5, 1, 2], qual será o estado do vetor ao final?

A[3, 1, 2, 5] — o 5 borbulhou até o fim
B[1, 2, 3, 5] — já totalmente ordenado
C[3, 5, 1, 2] — sem mudança alguma
D[5, 3, 2, 1] — ordem decrescente
🧠 Rastreio: compara (3,5) — ok, sem troca → [3,5,1,2]. Compara (5,1) — troca → [3,1,5,2]. Compara (5,2) — troca → [3,1,2,5]. O maior elemento (5) chegou ao fim, mas o vetor ainda não está totalmente ordenado.
09 / 15
Aula 4 Ponte

Já organizamos… agora decifremos

Saber ordenar dados é só uma das coisas que fazemos com vetores. Outra é extrair informação: qual é a média da turma? Qual a maior nota? E a menor? A próxima aula mostra que uma única varredura resolve as três perguntas — basta combinar acumuladores e sentinelas.

10 / 15
Aula 4 Antes do desafio

Passo a passo das estatísticas

Esta é a receita para extrair média, máximo e mínimo em uma única varredura. Guarde-a: no próximo slide você vai implementá-la sozinho.

1

Prepare os dados. Tenha o vetor de notas que será analisado.

2

Crie os acumuladores. soma = 0 (acumulador) e maior = v[0], menor = v[0] (sentinelas) — sempre com o primeiro elemento, nunca com 0.

3

Percorra o vetor. Use for i in range(len(v)) para visitar cada elemento uma única vez.

4

Acumule e compare. Some soma = soma + v[i]; se v[i] > maior, atualize maior; se v[i] < menor, atualize menor.

5

Calcule e mostre. Depois do laço: media = soma / len(v) e imprima média, máximo e mínimo.

⚠️ Inicializar as sentinelas com v[0] (passo 2) é essencial. Com 0, uma lista só de negativos daria "maior" = 0 — um valor que nem existe na lista.
11 / 15
Aula 4 Sua vez · Desafio

Desafio: implemente as estatísticas

Complete o programa abaixo. A partir do vetor de notas, ele deve calcular e exibir a média, o máximo e o mínimo em uma única varredura. Siga os 5 passos do slide anterior.

v = [8.5, 7.0, 9.5, 6.0, 8.0, 5.5]

soma  = 0                  # 2 · acumulador
maior = v[0]               #     sentinela (máx)
menor = v[0]               #     sentinela (mín)

for i in range(len(v)):    # 3 · uma única varredura
    soma = soma + v[i]     # 4 · acumula
    if v[i] > maior:       #     atualiza o máximo
        maior = v[i]
    if v[i] < menor:       #     atualiza o mínimo
        menor = v[i]

media = soma / len(v)      # 5 · calcula e mostra
print(f"Média:  {media:.4f}")
print(f"Máximo: {maior}")
print(f"Mínimo: {menor}")
Média:  7.4167
Máximo: 9.5
Mínimo: 5.5

── saída esperada do ──
── seu programa ↑ ──────
🎯 Regras do desafio: resolva com um único laço, sem usar os atalhos sum(), max() ou min(). Inicialize maior e menor com v[0], nunca com 0.
12 / 15
Pause e responda

Inicialização e o vetor de 1 elemento

Ao inicializar maior e menor com o primeiro elemento da lista (v[0]), o que acontece se a lista tiver apenas um valor, como [500]?

AO programa dará um erro
BMaior será 500, menor será 0
CMaior e menor serão ambos 500 — comportamento matematicamente correto
DMaior e menor não serão inicializados
🧠 Por que faz sentido: num conjunto de um único valor, esse valor é simultaneamente o maior e o menor. Inicializar com v[1] torna o algoritmo correto até nesse caso-limite — diferente de inicializar com 0, que daria um resultado errado.
13 / 15
Então ficamos assim…

O que aprendemos hoje

  • Bubble Sort → ordena por trocas adjacentes em sucessivas passadas; os maiores "borbulham" para o fim
  • Variável auxiliar (temp) ou o atalho Python a, b = b, a permitem trocar dois valores sem perdê-los
  • Complexidade O(N²) → didático mas ineficiente para grandes volumes
  • Acumuladores (soma) e sentinelas (maior, menor) → técnica fundamental de processamento de coleções
  • Uma única varredura resolve média, máximo e mínimo — complexidade O(N)
  • Inicializar sentinelas com v[0] (não 0) é a forma correta — robusta até para casos-limite
  • Python oferece sum(), max(), min() e sorted() como built-ins — mas saber implementar na mão é o que ensina algoritmo
📚 Próxima semana · Sem 12

Matrizes (arrays bidimensionais) — saltamos de uma para duas dimensões: linhas e colunas, acesso por m[i,j], e novos padrões de varredura. A semana 13 fecha a unidade com funções e procedimentos.

14 / 15
Saiba mais · Para aprofundar

Vai além da aula 📺

Como funciona o Bubble Sort

Vídeo passo a passo de como o algoritmo opera internamente — análise dos pares de valores e construção gradual da lista ordenada.

📎 ELEMAR JUNIOR — O que é e como funciona o BubbleSort (passo-a-passo). YouTube, 8 out. 2023.
youtube.com/watch?v=8RkZoBZNNgI

Vetores: acesso e armazenamento

Para fechar a unidade — vídeo que reforça e aprofunda os conceitos básicos de vetores, ampliando a base de tudo que vimos nas 4 aulas da semana.

📎 PROF. ROMERSON OLIVEIRA — AEDS 6: Vetores (1) — O que são, como acessar e como são armazenados. YouTube, 23 out. 2020.
youtube.com/watch?v=i0QgDWI9Y4E

15 / 15
Referências

De onde veio cada coisa

FARIAS, R. Aula 05 — Ordenação e pesquisa. COS 121: estruturas de dados e algoritmos. UFRJ, [s.d.]. Disponível em: cos.ufrj.br/~rfarias/cos121/aula_05.html. Acesso em: 28 nov. 2025.

GATTO, E. C. Algoritmos de ordenação: Bubble Sort. Embarcados, 16 ago. 2017. Disponível em: embarcados.com.br/algoritmos-de-ordenacao-bubble-sort. Acesso em: 28 nov. 2025.

Base institucional: SEDUC-SP. Educação Profissional Paulista — Técnico em Desenvolvimento de Sistemas. Componente 1, Unidade 4, Semana 11 (SISANO1C1B2S11A3 e SISANO1C1B2S11A4).

Identidade visual · imagens © Getty Images · adaptação para apresentação HTML por Guilherme Antunes