Troca-troca 1
Agora considere a seguinte tarefa
Trocar o maior e o menor elementos de lugar - (i.e., um com o outro)
No exemplo acima, isso nos daria
L
Agora considere a seguinte tarefa
No exemplo acima, isso nos daria
L
0 | 1 |
|
n-1 | |||||
---|---|---|---|---|---|---|---|---|
17 | 10 | 6 | 15 | 9 | 30 | 42 | 20 | 16 |
Apresente um programa que realiza essa tarefa.
Passo 1
Beleza, o enunciado pede um programa que, dado um vetor de números, encontre o maior e o menor elementos e troque os lugares deles. Isso é matéria de estruturas de dados básicas (vetor) e algoritmos de varredura com laços. Para resolver a gente vai precisar de:
- Um laço para percorrer todo o vetor (de 0 até
). - Duas variáveis para guardar o índice do menor e do maior achados até agora.
- Uma variável temporária para fazer a troca (swap).
Passo 2
Primeiro, vamos entender como a gente “varre” um vetor. Se o vetor tiver tamanho
, ele tem posições de índice
. A ideia é iniciar duas variáveis:
e assumir que o primeiro elemento (
) é, ao mesmo tempo, o menor e o maior. A cada nova posição
que visitamos, comparamos:
- Se
, atualizamos . - Se
, atualizamos .
Passo 3
Explicando a teoria de comparação: quando fazemos
, estamos vendo se o elemento atual é menor do que o menor que já tínhamos guardado. Se for, trocamos o “menor até agora” para esse índice
. Mesmo raciocínio vale para achar o maior.
Passo 4
Depois de percorrer todo o vetor, as variáveis
e
estão apontando para os índices do menor e do maior elemento, respectivamente. Aí fazemos a troca (swap) simples usando uma variável temporária:
Passo 5
for i in range(1, n):
if arr[i] < arr[min_idx]:
min_idx = i
if arr[i] > arr[max_idx]:
max_idx = i
if arr[i] < arr[min_idx]:
min_idx = i
if arr[i] > arr[max_idx]:
max_idx = i
Passo 6
temp = arr[min_idx]
arr[min_idx] = arr[max_idx]
arr[max_idx] = temp
return arr
arr[min_idx] = arr[max_idx]
arr[max_idx] = temp
return arr
Exemplo de uso:
vetor = [17, 10, 6, 15, 9, 30, 42, 20, 16]
print(troca_maior_menor(vetor))
print(troca_maior_menor(vetor))
Saída: [17, 10, 42, 15, 9, 30, 6, 20, 16]
Pronto! Esse código lê o vetor, acha o menor e o maior, e vira o jogo deles.
Resposta
def troca_maior_menor(arr):
n = len(arr)
# Inicializa índices
min_idx = 0
max_idx = 0