
- 인접한 요소들 간의 값을 비교해준다.
- 두 요소 중 앞의 값이 뒤의 값보다 더 크다면, 값을 바꿔준다.
- 배열의 요소가 하나가 남을 때 까지 1~2의 과정을 반복한다.
첫 번째 회전에서의 비교 횟수 : n-1
두 번째 회전에서의 비교 횟수 : n-2 (두번째 인덱스부터 시작)
/.../
이러한 원리를 적용하여, 배열의 원소가 하나가 남을 때 까지 비교를 반복하면,
최종 시간 복잡도는 (n-1) + (n-2) + .... + 2 + 1 => n(n-1)/2 이므로,
O(n^2) 이다.
주어진 배열 안에서 교환을 통해 정렬이 수행되므로 O(n)이다.
package hw_0926;
public class BubbleSort {
public static int[] bubbleSort(int n, int[] arr) {
int temp;
for(int i=0;i<n-1;i++) {
for(int j = i+1;j<n;j++) {
if(arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
public static void showArray(int [] arr) {
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i] + " ");
}
System.out.println(); //단순히 출력 형식을 맞춰주기 위함
}
public static void main(String[] args) {
int arr[] = { 7, 4, 5, 1, 3 };
int n = arr.length;
System.out.println("-----------정렬 전-----------");
showArray(arr);
bubbleSort(n,arr);
System.out.println("-----------정렬 후-----------");
showArray(arr);
}
}

버블 정렬에 대해 오래간만에 다시 공부해보았습니다.
학부 시절, 인접한 요소들끼리 계속적으로 비교하는 과정을 네모로 묶었을 때, 네모가 계속 겹쳐 "와 이래서 버블 정렬인가?" 라고 생각하며 공부 했었던 기억이 떠올랐습니다.
아무쪼록, 버블 정렬의 개념에 대해 알아볼 수 있는 유익한 시간이었습니다.