본문 바로가기

Tech/Algo

[알고리즘] 안정적인 정렬

안정적인 출력이란 같은 숫자를 가진 카드가 여러 개 있을 때, 이들을 입력한 순서대로 출력하는 것을 의미한다.
예를들면, H4 C9 S4 D2 C3 입력 값이면 숫자로 오름차순으로 정렬하면,
D2 C3 H4 S4 C9가 출력이 된다.
버블정렬은 안정적인 정렬이라고 볼 수 있다.
#include <iostream>
using namespace std;

struct Card { char suit, value;};

void bubble(struct Card A[], int N) {
    for(int i = 0; i < N; i++) {
        for(int j = N - 1; j >= i+1; j--) {
            if(A[j].value < A[j - 1].value) {
                Card t = A[j];
                A[j] = A[j - 1];
                A[j - 1] = t;
            }
        }
    }
}

void selection(struct Card A[], int N) {
    for(int i = 0; i < N; i++) {
        int minj = i;
        for(int j = i; j < N; j++) {
            if(A[j].value < A[minj].value) {
                minj = j;
            }
        }
        Card t = A[i]; A[i] = A[minj]; A[minj] = t;
    }
}

void print(struct Card A[], int N) {
    for(int i = 0; i < N; i++) {
        if(i > 0) cout << " ";
        cout << A[i].suit << A[i].value;
    }
    cout << endl;
}

int main() {
    Card C1[100], C2[100];
    int N;
    char ch;

    cin >> N;
    for(int i = 0; i < N; i++) {
        cin >> C1[i].suit >> C1[i].value;
    }
    for(int i = 0; i < N; i++) {
        C2[i] = C1[i];
    }
    bubble(C1, N);
    selection(C2, N);
    print(C1, N);
    print(C2, N);
}