BAEKJOON/단계별로 풀어보기

[BOJ] 2750번 : 수 정렬하기

말하는 알감자 2022. 8. 20. 01:44

🔒 문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

⌨ 입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

🖨 출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

📚 예제

Ex1)

5
5
2
3
4
1

1
2
3
4
5

📌 풀이

버블 정렬을 사용하였습니다.
버블 정렬과 관련된 내용은 자료구조에서 자세하게 정리하겠습니다!
버블 정렬은 첫번째 원소부터 인접한 원소와 비교하여 자리를 바꾸면서 맨 끝부터 정렬하는 방식입니다.
오름차순으로 정렬하기 위해 인덱스 i가 인덱스 i+1보다 큰 경우 자리를 바꿔줬습니다.
시간 복잡도는 O(n^2)입니다.

🔑 c언어 코드

#include <stdio.h>
#define SWAP(t,x,y)(t=x,x=y,y=t)

int sorting(int* n, int N); // 버블 정렬
void print(int* n, int N); // 정렬 결과 출력

int main()
{
    int N;
    int* n;
    scanf("%d", &N);
    n = malloc(sizeof(int) * N);

    for (int i = 0; i < N; i++)
        scanf("%d", &n[i]);

    n = sorting(n,N);
    print(n, N);

}

int sorting(int* n, int N)
{
    int t;

    for (int i = 0; i < N; i++)
        for (int j = 1; j < N - i; j++)
        {
            if (n[j - 1] > n[j])
                SWAP(t, n[j - 1], n[j]);
        }

    return n;
}

void print(int* n, int N)
{
    for (int i = 0; i < N; i++)
        printf("%d\n", n[i]);
}