-
버블 정렬(Bubble Sort)자료구조와 알고리즘/기초 2020. 9. 14. 15:57
개념
버블 정렬은 바로 옆에 있는 값과 비교해서 우선 순위가 높은 값을 앞으로 보낸다.
예제
다음은 5개의 정수 배열 {5, 3, 4, 2, 1} 을 오름차순으로 버블 정렬하는 과정을 보여준다.
다음 그림과 같이 인접한 두 수를 비교하고 앞에 있는 수가 뒤에 있는 수보다 클 때 교환하는 과정을 반복하며 끝까지 진행하면 가장 큰 수인 5가 맨 뒤에 오게 된다. 이렇게 되면 첫 번째 순회가 끝난다. 그 이후에는 마지막 인덱스를 제외하면서 계속 순회하며 정렬하는 과정을 반복한다.
구현
class Sort { public static void bubbleSort(int[] arr) { for (int i = 1; i < arr.length; i++) { for (int j = 0; j < arr.length - i; j++) { if (arr[j] > arr[j + 1]) { swap(j, j + 1, arr); } } } } public static void swap(int idx1, int idx2, int[] arr) { int temp = arr[idx1]; arr[idx1] = arr[idx2]; arr[idx2] = temp; } }
시간복잡도
N 개의 데이터를 버블 정렬한다면 연산횟수는 다음과 같다.
N + (N -1) + (N-2) + ... + 3 + 2 + 1
이를 등차수열의 합 공식으로 표현하면 다음과 같다.
(N + 1) * N /2
위 공식에서 최고차항을 제외하면 N^2 로
버블정렬은 O (N^2) 의 시간 복잡도를 가진다고 말할 수 있다.
'자료구조와 알고리즘 > 기초' 카테고리의 다른 글
퀵 정렬(Quick Sort) (0) 2020.09.19 삽입 정렬(Insertion Sort) (0) 2020.09.16 선택 정렬(Selection Sort) (0) 2020.09.13