본문 바로가기
자바(Java)

버블 정렬 Java 프로그램 쉽게 이해하기

by 코딩하는 욤욤이 2024. 11. 14.
반응형

버블 정렬(Bubble Sort)은 두 개의 인접한 요소를 비교하고, 크기에 따라 자리를 바꾸어 정렬하는 간단한 알고리즘입니다. 초심자도 쉽게 이해할 수 있는 방식으로, 작은 숫자부터 큰 숫자까지 차례로 정렬하려고 할 때 효과적입니다. 이름처럼 큰 숫자가 거품처럼 배열의 끝으로 "떠오르는" 방식으로 작동합니다.

 

버블 정렬 알고리즘 이해하기

 

버블 정렬은 다음과 같은 순서로 작동합니다.

  1. 배열의 첫 번째 요소부터 인접한 두 요소를 비교합니다.
  2. 두 요소를 비교하여 앞의 요소가 더 크면 두 요소의 자리를 바꿉니다.
  3. 이렇게 하면 가장 큰 숫자가 배열의 끝으로 이동합니다.
  4. 이 과정을 배열의 처음부터 끝까지 반복합니다.
  5. 한 번 끝까지 다 비교한 후에는, 마지막 위치에 가장 큰 요소가 위치하게 됩니다.
  6. 배열이 완전히 정렬될 때까지 이 과정을 반복하며 점점 비교할 범위를 줄여 나갑니다.

이렇게 되면, 각 반복마다 가장 큰 요소가 배열의 끝으로 배치되며 정렬이 완료됩니다.

 

Java 코드로 구현하기

 

다음은 Java로 버블 정렬을 구현한 간단한 코드입니다.

public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = {5, 3, 8, 4, 2};  // 정렬할 배열
        
        System.out.println("정렬 전 배열: ");
        printArray(arr);
        
        bubbleSort(arr);  // 버블 정렬 함수 호출
        
        System.out.println("정렬 후 배열: ");
        printArray(arr);
    }
    
    // 버블 정렬 함수
    public static void bubbleSort(int[] arr) {
        int n = arr.length;
        for (int i = 0; i < n - 1; i++) {             // 전체 반복 횟수를 줄이기 위해 n-1회 반복
            for (int j = 0; j < n - i - 1; j++) {     // 이미 정렬된 요소는 비교하지 않음
                if (arr[j] > arr[j + 1]) {            // 인접한 요소 비교
                    // 자리 바꾸기
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
    
    // 배열 출력 함수
    public static void printArray(int[] arr) {
        for (int i : arr) {
            System.out.print(i + " ");
        }
        System.out.println();
    }
}

코드 설명

  1. 배열 정의: int[] arr = {5, 3, 8, 4, 2}; — 정렬할 배열을 미리 설정합니다.
  2. 정렬 전 출력: printArray(arr); — 배열을 출력하는 함수입니다. 현재 배열 상태를 보기 위함입니다.
  3. 버블 정렬 함수 호출: bubbleSort(arr); — 버블 정렬 메서드를 호출하여 배열을 정렬합니다.
  4. 버블 정렬 함수 구현: bubbleSort(int[] arr) — 배열을 정렬하는 함수입니다.
    • 바깥 반복문: for (int i = 0; i < n - 1; i++) — 배열의 길이에서 1을 뺀 만큼 반복합니다. 각 반복마다 가장 큰 요소가 오른쪽으로 정렬되기 때문에, 이후 반복에서는 비교 범위가 하나씩 줄어듭니다.
    • 안쪽 반복문: for (int j = 0; j < n - i - 1; j++) — 인접한 요소끼리 비교하고 필요하면 자리를 바꾸는 작업을 수행합니다.
    • 조건문: if (arr[j] > arr[j + 1]) — 현재 요소가 다음 요소보다 크다면 두 요소의 자리를 바꿉니다.
  5. 자리 바꾸기: temp 변수를 사용해 요소 간의 자리를 바꿉니다.

프로그램 실행 과정

주어진 배열 {5, 3, 8, 4, 2}에 대해 프로그램이 실행되는 과정을 살펴보겠습니다.

  • 첫 번째 반복:
    • 5와 3을 비교하여 자리를 바꿈 → {3, 5, 8, 4, 2}
    • 5와 8은 자리를 바꾸지 않음
    • 8과 4를 비교하여 자리를 바꿈 → {3, 5, 4, 8, 2}
    • 8과 2를 비교하여 자리를 바꿈 → {3, 5, 4, 2, 8}
    • 가장 큰 숫자 8이 끝으로 이동
  • 두 번째 반복:
    • 3과 5는 바꾸지 않음
    • 5와 4를 비교하여 자리를 바꿈 → {3, 4, 5, 2, 8}
    • 5와 2를 비교하여 자리를 바꿈 → {3, 4, 2, 5, 8}
    • 두 번째로 큰 숫자 5가 그다음 위치로 이동

이런 식으로 반복하여 배열이 완전히 정렬될 때까지 계속 진행합니다.

 

결과

이 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

정렬 전 배열: 
5 3 8 4 2 
정렬 후 배열: 
2 3 4 5 8

이렇게 버블 정렬을 통해 배열이 오름차순으로 정렬된 것을 확인할 수 있습니다.

 

요약

  • 버블 정렬은 인접한 요소끼리 비교해 큰 요소가 오른쪽으로 이동하는 방식으로 배열을 정렬합니다.
  • 간단한 알고리즘이지만, 데이터 크기가 클수록 비효율적이므로 작은 배열에 적합합니다.
  • 처음 접하는 프로그래머에게도 코드 이해가 쉽고 구현이 간단한 장점이 있습니다.
반응형