본문 바로가기
C#

정렬 알고리즘의 기초 1편 : 버블 정렬 (Bubble Sort)

by Oz Driver 2025. 5. 4.

정렬 알고리즘은 프로그래밍에서 가장 기본적이고 중요한 주제 중 하나입니다.
그중에서도 버블 정렬은 구조가 단순하고 이해하기 쉬워, 알고리즘 학습의 출발점으로 자주 사용됩니다.

이번 글에서는 버블 정렬의 작동 방식과 구현 방법, 그리고 왜 ‘버블’이라는 이름이 붙었는지에 대해 소개드립니다.

 

버블 정렬이란?

버블 정렬은 인접한 두 값을 비교하여 큰 값을 뒤로 보내는 방식의 정렬 알고리즘입니다.
한 바퀴를 돌고 나면 가장 큰 값이 맨 뒤로 이동하게 되며, 이 과정을 반복함으로써 전체 배열이 정렬됩니다.

이러한 과정에서 큰 수가 점점 뒤로 ‘떠오르는’ 모습이 거품(Bubble) 이 물 위로 올라가는 것과 비슷하기 때문에
‘버블 정렬(Bubble Sort)’이라는 이름이 붙었습니다.

 

 

작동 방식 요약

1. 왼쪽부터 인접한 두 값을 비교합니다.

2. 앞의 값이 더 크면 두 값을 바꿉니다.

3. 끝까지 비교를 반복합니다.

4. 한 바퀴가 끝나면 가장 큰 값이 맨 뒤에 정렬됩니다.

5. 그 다음 바퀴에서는 마지막 값은 제외하고 반복합니다.

6. 배열 전체가 정렬될 때까지 이 과정을 반복합니다.

 

C# 코드 예시

// 버블 정렬 알고리즘
int[] numbers = { 52, 86, 3, 79, 45, 12, 99, 23, 56, 78 };

for(int i = 0; i < numbers.Length; i++)
{
    for (int j = 0; j < numbers.Length - 1 - i; j++)
    {
        if (numbers[j] > numbers[j + 1])
        {
            // 전통적인 방식의 값 교환
            int temp = numbers[j];
            numbers[j] = numbers[j + 1];
            numbers[j + 1] = temp;
        }
    }
}

for (int i = 0; i < numbers.Length; i++)
{
    Console.Write(numbers[i] + " ");
}

Console.ReadKey();

 

위 코드는 배열의 요소를 앞에서부터 차례로 비교하고, 앞의 값이 더 크면 서로 위치를 바꿉니다.
이 과정을 전체 길이만큼 반복하면 배열이 오름차순으로 정렬됩니다.

 

튜플을 이용한 값 교환 방식

C# 에서는 두 값을 교환할 때 튜플(Tuple) 구조 분해 할당을 사용할 수 있습니다.
이 방법을 사용하면 임시 변수 없이 두 값을 한 줄로 교환할 수 있으며, 가독성이 높아 최신 코드에서 자주 활용됩니다.

위 코드에서 temp 를 사용한 부분은 다음 한 줄로 대체할 수 있습니다.

(numbers[j], numbers[j + 1]) = (numbers[j + 1], numbers[j]);

 

보다 간결하고 의도가 명확하게 드러나는 방식이므로, 단순한 값 교환에는 이 방법이 추천됩니다.

 

정렬 결과 출력 : string.Join()

정렬이 완료된 배열을 출력할 때는 for 반복문 대신, string.Join() 메서드를 사용하면 매우 간편하게 출력할 수 있습니다. 첫번째 인자로는 각 string 값 사이를 구분할 수 있는 구분자입니다. 

Console.WriteLine(string.Join(", ", numbers));

 

위 코드는 배열 numbers 의 요소들을 쉼표와 공백으로 구분하여 한 줄로 출력합니다.

 

마무리

다음 글에서는 선택 정렬(Selection Sort) 에 대해 소개드릴 예정입니다.
선택 정렬은 버블 정렬과 어떤 점이 다른지, 또 어떤 방식으로 작동하는지 비교해보시면 이해에 도움이 될 것입니다.