1042 - Sort Simples

Você pode usar a função sort() ou algum dos métodos de ordenação apresentados aqui neste solucionário.

Descrição

Solução

Podemos simplesmente colocar estes valores em um vetor e ordená-los usando o método naturalmente de ordenação ou usando um dos métodos apresentados na página Ordenação.

Seja qual for a solução, lembre-se de guardar a ordem original da entrada em outras variáveis.

Alternativa 1 - Transformando em vetor e ordenando com sort()

Esta abordagem é mais simples, só usa um pouquinho mais de memória, mas bem pouquinho mesmo.

#include <stdlib.h>
#include <stdio.h>

int comp(const void* a, const void* b){
    return *(int*)a - *(int*)b;
}

int main(){
    int v[3], V[3];

    for(int i = 0; i < 3; ++i){
        scanf("%d", &V[i]);
        v[i] = V[i];
    }

    qsort(v, 3, sizeof(int), comp);

    for(int i = 0; i < 3; ++i){
        printf("%d\n", v[i]);
    }
    printf("\n");
    for(int i = 0; i < 3; ++i){
        printf("%d\n", V[i]);
    }

    return 0;
}

Alternativa 2 - Usando InsertionSort

Um método eficiente e fácil de implementar que podemos usar é o InsertionSort, onde podemos proceder da seguinte maneira:

  1. Verificar se o segundo elemento é menor que o primeiro. Se for, trocar as posições de ambos.

  2. Verificar se o terceiro elemento é menor que o segundo. Se for, trocar as posições de ambos.

  3. Se no passo anterior, se os elementos foram trocados, então verificar novamente se o agora segundo elemento é menor que o primeiro e se for, trocar as posições de ambos.

#include <stdio.h>

void swap(int* a, int* b){
    int aux = *a;
    *a = *b;
    *b = aux;
}

int main(){
    int a, b, c, A, B, C;

    scanf("%d %d %d", &A, &B, &C);
    a = A, b = B, c = C;

    if(b < a)   swap(&a, &b);

    if(c < b){
        swap(&b, &c);
        if(b < a)   swap(&a, &b);
    }

    printf("%d\n%d\n%d\n\n%d\n%d\n%d\n", a, b, c, A, B, C);

    return 0;
}

Last updated