1. Por meio de uma função, ordene a seguinte lista de números em ordem crescente: [5, 1, 4, 2, 8]. Não obstante, considere que o seu programa deve funcionar para qualquer lista de qualquer tamanho. Apenas por questão de simplicidade é que, no lugar de o usuário inserir por meio de input os valores da lista, ela já estará fixa no código e conterá os valores já informados. Faça a função retornar a lista ordenada e faça a impressão dela.
    Apresente o seu código relativo a esta questão em uma folha extra (pode ser do seu caderno).

Passo 1

O que o enunciado pede:
  • Criar uma função que ordene uma lista de números em ordem crescente.
  • A lista deve ficar fixa no código com os valores dados: [5, 1, 4, 2, 8], mas a função tem que funcionar para qualquer lista de qualquer tamanho.
  • A função deve retornar a lista ordenada e o programa deve imprimir essa lista.
Informações dadas:
  • Lista a ordenar (fixa no código): [5, 1, 4, 2, 8].
  • Requisito funcional: função genérica, retorna a lista ordenada; imprimir o resultado.

Passo 2

Qual método vamos usar e por quê (sem jargão complicado):
  • Vou usar o método “selection sort” (ordenamento por seleção). Por que? Porque é fácil de entender, fácil de implementar sem funções prontas da linguagem e explica bem o processo de ordenar passo a passo — ótimo para fazer à mão na prova.
  • Importante: existem outros métodos (por exemplo, “bubble sort”, “insertion sort”, ou algoritmos mais eficientes como “merge sort” e “quick sort”), mas o selection sort é simples e seguro quando você precisa apresentar código curto que funcione para qualquer lista.

Passo 3

Explicando o selection sort de forma bem didática:
  • Idéia geral: percorremos a lista da esquerda para a direita. Em cada posição i, encontramos o menor elemento entre as posições i, i+1, …, n-1 e trocamos esse menor elemento com o elemento que está na posição i. Repetimos até a penúltima posição.
  • Variáveis que vamos usar (explicando cada uma):
    • lst: a lista que queremos ordenar (não vamos modificar a lista original; faremos uma cópia).
    • n: tamanho da lista (número de elementos).
    • i: índice da posição atual onde colocaremos, a cada iteração, o menor elemento do subvetor restante.
    • min_idx: índice do menor elemento encontrado no subvetor a partir de i.
    • j: índice usado para percorrer o subvetor i+1…n-1 procurando um elemento menor.
  • Operação principal: troca (swap) entre dois elementos da lista; em Python fazemos isso com uma atribuição simultânea: arr[i], arr[min_idx] = arr[min_idx], arr[i]. Isso evita precisar de variável temporária.

Passo 4

Pseudocódigo resumido (para você entender a tradução para código):
  • Copiar a lista para não alterar a original.
  • Para i de 0 até n-2:
    • min_idx = i
    • Para j de i+1 até n-1:
      • Se arr[j] < arr[min_idx], então min_idx = j
    • Trocar arr[i] com arr[min_idx]
  • Retornar arr (lista ordenada)

Passo 5

Código Python pronto (use este código na sua folha extra). A função retorna a lista ordenada; depois imprimimos o resultado usando a lista fixa no enunciado.
def selection_sort(lst):
    # Faz uma cópia para não modificar a lista original passada como argumento
    arr = lst.copy()
    n = len(arr)
    # Percorremos até n-2 porque o último elemento estará no lugar automaticamente
    for i in range(n - 1):
        min_idx = i
        # Procuramos o índice do menor elemento no subvetor arr[i+1..n-1]
        for j in range(i + 1, n):
            if arr[j] < arr[min_idx]:
                min_idx = j
        # Troca os elementos: colocamos o menor encontrado na posição i
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
    return arr

# Lista fixa do enunciado
data = [5, 1, 4, 2, 8]

# Chamada da função e impressão do resultado
sorted_data = selection_sort(data)
print(sorted_data)

Passo 6

Passo a passo da execução do código com a lista [5, 1, 4, 2, 8] — mostro como a lista muda em cada iteração para você aprender a fazer na prova:
  • Estado inicial: [5, 1, 4, 2, 8]
Iteração i = 0:
  • Subvetor a considerar: índices 0…4 -> [5, 1, 4, 2, 8]
  • Menor elemento no subvetor é 1 (índice 1).
  • Troca arr[0] com arr[1] → lista vira [1, 5, 4, 2, 8]
Iteração i = 1:
  • Subvetor a considerar: índices 1…4 -> [5, 4, 2, 8]
  • Menor elemento no subvetor é 2 (índice 3).
  • Troca arr[1] com arr[3] → lista vira [1, 2, 4, 5, 8]
Iteração i = 2:
  • Subvetor a considerar: índices 2…4 -> [4, 5, 8]
  • Menor elemento no subvetor é 4 (índice 2).
  • Troca arr[2] com arr[2] (troca com ele mesmo) → lista permanece [1, 2, 4, 5, 8]
Iteração i = 3:
  • Subvetor a considerar: índices 3…4 -> [5, 8]
  • Menor elemento no subvetor é 5 (índice 3).
  • Troca arr[3] com arr[3] → lista permanece [1, 2, 4, 5, 8]
Fim: lista ordenada [1, 2, 4, 5, 8]
Observação amiga: perceba que depois das primeiras duas iterações já chegamos na lista ordenada; nas iterações seguintes o algoritmo verifica, mas não estraga a ordem. Isso é normal no selection sort.

Passo 7

Dicas para a prova (curtas e práticas):
  • Explique a ideia do selection sort em poucas frases: “em cada passo, escolho o menor do resto e coloco no lugar”. Desenhe um exemplo pequeno (3 ou 4 números) se pedir para explicar.
  • Se pedirem para o código não modificar a lista original, sempre faça uma cópia com arr = lst.copy().
  • Teste mentalmente com listas já ordenadas e listas com elementos repetidos — o algoritmo funciona também nesses casos.
  • Se quiser algo mais eficiente depois (para conjuntos grandes), estude quick sort ou merge sort; mas para a maioria dos exercícios curtos, selection sort é aceito.

Resposta

[1, 2, 4, 5, 8]

Exercícios relacionados