버블정렬 (Bubble sort)
인접한 두 값을 비교하여 자리 교환하는 방식이다.
첫 번째 값부터 반복적으로 비교하여 한 바퀴가 끝나고 나면 마지막 값은 가장 큰 값이 된다.
선택정렬 대비 swap이 많이 이루어지기 때문에 자료가 역순으로 정렬되어 있을 경우 성능이 좋지 않다.
반대로 정렬이 어느정도 이루어져 있는 경우 성능이 좋다.
버블정렬 수행과정
배열 {23, 4 ,7, 12, 2, 1} 버블정렬 과정
1. 23과 4 비교, 23이 더 크므로 swap
{4, 23, 7, 12, 2, 1}
2. 23과 7 비교, 23이 더 크므로 swap
{4, 7, 23 ,12, 2, 1}
3. 23과 12 비교, 23이 더 크므로 swap
{4, 7, 12, 23, 2, 1}
4. 23과 2 비교, 23이 더 크므로 swap
{4, 7, 12, 2, 23, 1}
5. 23과 1 비교, 23이 더 크므로 swap
{4, 7, 12, 2, 1, 23}
6. 이 과정을 반복하게 되면 큰 값들이 끝자리 부터 정리되게 된다.
- 예제 코드
public class BubbleSort {
public static void bubbleSort(int arr[], int last) {
if (last > 0) {
for (int i = 0; i < last; i++) {
if (arr[i] > arr[i+1]) {
swap(arr, i, i + 1);
}
}
bublleSort(arr, last - 1);
}
}
public static void swap(int arr[], int index1, int index2) {
int tmp;
tmp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = tmp;
}
public static void printArray(int arr[]) {
for (int data : arr) {
System.out.print(data + ", ");
}
System.out.println();
}
public static void main(String[] args) {
int arr[] = { 23, 4, 7, 12, 2, 1 };
printArray(arr);
bubbleSort(arr, arr.length - 1);
printArray(arr);
}
}
결과 : 23, 4, 7, 12, 2, 1
1, 2, 4, 7, 12, 23
'Algorithm' 카테고리의 다른 글
[알고리즘] 깊이 우선 탐색(DFS) (0) | 2020.08.01 |
---|---|
[자료구조] 이진 탐색 트리(Binary Search Tree) (0) | 2020.07.31 |
[자료구조] 자바 Queue 정리 (0) | 2020.07.30 |
[자료구조] 자바 Stack 정리 (0) | 2020.07.29 |
[정렬] 선택정렬 (Selection sort) (0) | 2020.07.18 |