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
0 1 cdots 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:
  1. Um laço para percorrer todo o vetor (de 0 até ).
  2. Duas variáveis para guardar o índice do menor e do maior achados até agora.
  3. 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 minidx = 0, maxidx = 0 , 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 temp = arr[minidx],, arr[minidx] = arr[maxidx],, arr[maxidx] = temp 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

Passo 6

temp = arr[min_idx]
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))

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

Exercícios relacionados