버블 정렬은 간단한 정렬 알고리즘 중 하나로, 배열 안에서 가장 작은(또는 가장 큰) 값을 찾기 위해 인접한 두 원소를 반복적으로 비교하며 자리를 바꾸는 방식입니다. 가장 큰 값이 한 번에 끝으로 이동하는 방식이 거품이 위로 올라가는 모양과 비슷하다고 해서 "버블 정렬"이라고 부릅니다.
[5, 1, 4, 2, 8]에서 5와 1 비교 -> 자리 바꿈 -> [1, 5, 4, 2, 8][1, 5, 4, 2, 8]에서 5와 4 비교 -> 자리 바꿈 -> [1, 4, 5, 2, 8][1, 4, 5, 2, 8]에서 5와 2 비교 -> 자리 바꿈 -> [1, 4, 2, 5, 8][1, 4, 2, 5, 8]에서 5와 8 비교 -> 자리 바꾸지 않음[1, 4, 2, 5, 8]에서 1과 4비교 -> 자리 바꾸지 않음[1, 4, 2, 5, 8]에서 4와 2비교 -> 자리 바꿈 -> [1, 2, 4, 5, 8][1, 2, 4, 5, 8]에서 4와 5비교 -> 자리 바꾸지 않음[1, 2, 4, 5, 8]에서 1과 2비교 -> 자리 바꾸지 않음[1, 2, 4, 5, 8]에서 2과 4비교 -> 자리 바꾸지 않음[1, 2, 4, 5, 8]에서 1과 2비교 -> 자리 바꾸지 않음[1, 2, 4, 5, 8]import java.util.Arrays;
public class main {
public static void bubbleSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1 ; i++) {
// 이미 정렬된 부분을 제외하고 반복
for (int j = 0 ; j < n - 1 - i ; j++) {
if(arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
public static void main(String[] args) {
int[] arr = {5, 1, 4, 2, 8};
System.out.println("원본 배열 : "+Arrays.toString(arr));
bubbleSort(arr);
System.out.println("정렬된 배열 : "+Arrays.toString(arr));
}
}
코드 설명
bubbleSort메서드는 배열을 입력받아 정렬하는 함수입니다.n = arr.length : 배열의 길이를 구합니다.for(int i = 0 ; i < n -1; i++) : 이 반복문은 배열을 몇 번 패스할지를 결정합니다. 각 패스마다 가장 큰 값이 끝으로 이동하므로, 이미 정렬된 요소들은 다시 비교할 필요가 없습니다.for(int j = 0; j < n - 1 - i ; j++) : 이 내부 반복문에서는 인접한 두 요소를 비교하고 필요할 경우 자리를 바꾸는 작업을 수행합니다.arr[j] > arr[j+1] : 현재 값이 다음 값보다 크다면, 두 값을 자리 바꿈하여 큰 값이 뒤로 가게 합니다.