컴퓨터/백준 알고리즘

백준 알고리즘 2750번: 수 정렬하기 C언어(버블 정렬)

이상한 나그네 2020. 5. 23. 15:55

문제 출처: www.acmicpc.net/problem/2750

 

2750번: 수 정렬하기

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

www.acmicpc.net

1. 코드

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

int main(void)
{
    int * arr;
    int len, temp, i, j;
    
    scanf("%d", &len);
    arr = (int*) calloc(len, sizeof(int));
    
    for(i = 0; i < len; i++)
        scanf("%d", &arr[i]);
    
    for (i = len - 1; i > 0; i--)
    {
        for (j = 0; j < i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    for(i = 0; i < len; i++)
        printf("%d\n", arr[i]);
    
    free(arr);
    return 0;
}

(실행)

2. 문제 해결 방식

버블 정렬은 아래와 같이 실행된다.

순번 i의 값 j의 값 첫 번째 요소 두 번째 요소 세 번째 요소 네 번째 요소 다섯 번째 요소
1 0 0 5 4 3 2 1
2 4 0 4 5 3 2 1
3 4 1 4 3 5 2 1
4 4 2 4 3 2 5 1
5 4 3 4 3 2 1 5
6 3 0 3 4 2 1 5
7 3 1 3 2 4 1 5
8 3 2 3 2 1 4 5
9 2 0 2 3 1 4 5
10 2 1 2 1 3 4 5
11 1 0 1 2 3 4 5