이웃한 두 요소의 값을 비교하여 값으 교환을 반복하는 정렬입니다.
package Sort;
import java.util.Scanner;
public class BubbleSort {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = sc.nextInt();
}
bubbleSort(arr);
for (int i : arr) {
System.out.println(i);
}
}
static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = arr.length-1; j > i; j--) {
if (arr[j] < arr[j - 1]) {
swap(arr, j, j-1);
}
}
}
}
static void swap(int[] arr, int a, int b) {
int temp = arr[a];
arr[a] = b;
arr[b] = temp;
}
}
첫 번째 비교는 (n-1)번, 두 번째 비교는 (n-2)번 ... 마지막 비교는 1번 발생한다.
총 교환 횟수를 계산하면 (n-1) + (n-2) + ... + 1
= n(n-1)/2
이다.
따라서 시간 복잡도는 O(n^2)이다.