Pular para o conteúdo

Selection sort

objetivo Procurar a posição do menor e trazer pra frente. Uma troca por passada.

O laço de dentro NÃO troca nada. Ele só procura e anota a posição do menor valor que ainda sobrou.

A acontece uma vez só, depois que a busca termina. No total são no máximo n - 1 trocas, bem menos que o bubble.

Anotar a POSIÇÃO e não o valor é o detalhe que mais derruba gente. Sem a posição você não sabe com quem trocar.

exemplo.cclique numa linha pra entender ela

Onde todo mundo escorrega

  • Guardar o valor em vez da posição impede a troca.
  • Começar o laço de dentro em j = 0 faz ele olhar parte já ordenada e pode desfazer o trabalho.

Desafio

Escreva selection_sort_decrescente, que ordena do maior pro menor. A ideia é a mesma, só que procurando o MAIOR de cada trecho. A função trocar já está pronta.

void selection_sort_decrescente(int v[], int n)
o que a função tem que devolver
chamadasaída esperada
v = {4, 1, 9, 2, 7}imprimirVetor(v, 5)9 7 4 2 1
v = {1, 2, 3}imprimirVetor(v, 3)3 2 1
v = {5}imprimirVetor(v, 1)5
a sua função
linha 1
void trocar(int *a, int *b) {
    int temporario = *a;
    *a = *b;
    *b = temporario;
}

void selection_sort_decrescente(int v[], int n) {
    // ache a posicao do maior de cada trecho e traga pra frente
}

Ctrl+Enter (Cmd+Enter no Mac) roda. Esc sai do editor.

aperte Rodar pra ver a saída aqui

Dicas

Tenta sozinho primeiro. Travou de verdade, abre a primeira.