1. 버블 정렬이란?
버블정렬은 정렬 알고리즘 중 하나
서로 인접한 두 값을 비교해서, 큰 값을 뒤로 보내는 방식으로 정렬함. 이 과정을 반복하면 가장 큰 값이 '버블처럼' 맨 뒤로 올라감.
비교 대상: 인접한 두 수
교환 조건: 앞의 수 > 뒤의 수일 경우
반복 횟수: 전체 길이 - 1번 반복
2. 기본 예제
대표 예제1: 오름차순 정렬
public class bubble_sort1 {
public static void main(String[] args) {
int[] arr = {5, 3, 4, 1, 2};
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int num : arr) {
System.out.print(num + " ");
}
}
}
코드 설명:
- 바깥 for문: 전체를 몇 번 반복할지 결정 (총 n-1번)
- 안쪽 for문: 인접한 두 수를 비교해서 순서 바꿈
- 가장 큰 수가 오른쪽 끝으로 이동함 → 다음 반복에서는 비교 범위 하나 줄어듦
- swap(교환) 코드는 배열 값의 위치를 바꿔주는 역할
대표 예제2: 사용자 입력을 받아 버블 정렬하기
import java.util.Scanner;
public class bubble_sort2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("몇 개의 숫자를 정렬할까요? ");
int n = sc.nextInt();
int[] arr = new int[n];
System.out.println(n + "개의 숫자를 입력하세요:");
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.print("정렬 결과: ");
for (int num : arr) {
System.out.print(num + " ");
}
}
}
코드 설명:
- `Scanner`를 사용해 사용자에게 입력값을 받음
- `n`개의 숫자를 입력받아서 배열에 저장
- 기존 버블 정렬 알고리즘을 그대로 적용
- 정렬된 결과를 출력
3. 버블 정렬의 특징과 한계
1. 장점
- 구현이 매우 간단함
- 코드가 직관적이어서 처음 배우는 정렬로 적합
2. 단점
- 데이터 개수가 많아질수록 급격히 느려짐
- 실무에서는 거의 사용되지 않음