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
| chamada | saí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.