버블 정렬(Bubble Sort)란?
순차적으로 인접한 두개의 원소를 비교해나가면서 정렬하는 방법
버블 정렬의 알고리즘은?
(1) 1번 원소와 2번 원소를 비교 후 변경 또는 유지
(2) 2번 원소와 3번 원소를 비교 후 변경 또는 유지
(3) 3번 원소와 4번 원소를 비교 후 변경 또는 유지
(4) 4번 원소와 5번 원소를 비교 후 변경 또는 유지
(5) 배열의 크기 -1 만큼의 비교 연산이 이루어진다면, 가장 큰 수가 마지막에 정렬될 것이다.
(6) 다시 처음으로 돌아와 1번 원소와 2번 원소를 비교 후 변경 또는 유지
(7) 2번 원소와 3번 원소를 비교 후 변경 또는 유지
계속해서 순차적으로 인접 원소와 비교해 나가게 되고 빨간 상자로 표시 된 마지막 수는 모든 원소와 비교 후에 가장 큰 수로 판단되었으므로 이후 정렬 연산에는 참여할 필요가 없다.
버블 정렬을 자바 코드로 구현해보기!
public class bubblesort {
public static void main(String[] args) {
int[] arr = {3,2,5,4,1};
for(int i=0; i < arr.length; i++){
for(int j=0; j < arr.length-i-1; j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for(int i=0; i<arr.length; i++){
System.out.print(arr[i] + " ");
}
}
}
버블 정렬의 시간 복잡도
버블 정렬의 소스코드를 보면 최대 수를 찾기 위해 n-1번의 비교를 합니다. 그 후에는 n-2.. n-3.. 1번이 됩니다.
즉 n-1 + n-2 + n-3 + ---- + 1로 = (n)(n-1)/2번의 비교 연산을 수행하여 O(n^2)의 시간 복잡도를 가집니다.
버블 정렬은 단순하게 구현할 수 있지만 퀵 정렬, 힙 정렬, 합병 정렬 등과 비교하면 비효율적인 정렬 방법입니다.
또한 베스트 케이스나, 워스트 케이스, 평균적인 케이스의 시간 복잡도 모두 n^2를 가지고 있는 알고리즘입니다.
'알고리즘' 카테고리의 다른 글
프로그래머스 - 크레인 인형뽑기(2019 카카오 개발자 겨울 인턴십) (0) | 2020.08.18 |
---|---|
프로그래머스 - 소수 찾기 (에라토테네스의 체) (0) | 2020.08.18 |
프로그래머스 - JadenCase 문자열 만들기 (0) | 2020.08.11 |
프로그래머스 - 단어변환(DFS) (1) | 2020.05.31 |
프로그래머스 - 타겟넘버 (DFS, 조합 두가지 풀이) (0) | 2020.05.30 |