- 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).
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
— 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]