버블 정렬이란?
버블 정렬(bubble sort)은 서로 이웃한 데이터들을 비교하며 가장 큰 데이터를 가장 뒤로 보내는 정렬하는 방식입니다.
버블 정렬은 가장 무식하고 비효율적인 알고리즘 중 하나이지만 가장 직관적이고 구현하기 쉬운 알고리즘입니다.
예를 들어 다음과 같이 1부터 10까지의 수를 무작위로 섞어놓은 배열이 있습니다.
값 5 6 10 4 3 8 7 1 2 9
위치 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
먼저 5와 6을 비교하였을 때 뒤에 있는 6이 더 큰 숫자이므로 교환이 일어나지 않습니다.
다음은 6과 10을 비교하였을때 뒤에 있는 10이 더 큰 숫자이므로 역시 교환이 일어나지 않습니다.
다음은 10과 4를 비교하였을때 앞에 있는 10이 더 큰 숫자이므로 두 숫자는 교환이 일어납니다.
값 5 6 4 10 3 8 7 1 2 9
위치 [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
이런 식으로 [9] 번 인덱스까지 진행하게 되면 가장 큰 수인 10이 [9] 번 인덱스로 이동하게 되어 [9] 번 인덱스는 정렬이 끝나게 됩니다.
다시 [0]번 인덱스부터 [8] 번 인덱스까지 반복하게 되면 [8] 번 인덱스는 정렬이 끝나게 됩니다. 이런 방식을 10번 반복하게 되면 정렬이 끝나게 됩니다.
즉, 처음은 0~9까지, 두 번째는 0~8까지 세 번째는 0~7까지 . . .
다음은 C언어로 버블 정렬은 구현한 예입니다.
#include <stdio.h>
int main(){
//1~10 무작위 배열
int arr[10] = {5, 6, 10, 4, 3, 8, 7, 1, 2, 9};
int i, j, temp;
for(i=0;i<10;++i){
for(j=0;j<10-i-1;++j){
//옆에 있는 수와 비교하여 앞에수가 크다면 교환
if(arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
//출력
for(i=0;i<10;++i){
printf("%d ", arr[i]);
}
return 0;
}
결과값:
1 2 3 4 5 6 7 8 9 10
올림차순으로 정렬이 된 것을 확인할 수 있습니다.
버블 정렬의 시간 복잡도(or 빅오)는 O(N^2)입니다.
'알고리즘' 카테고리의 다른 글
[C/C++] 코드업(codeup) 4564번 계단 오르기 (1) | 2020.01.06 |
---|---|
[C/C++] 코드업(codeup) 3733번 우박수 길이 (3n+1) (large) (0) | 2020.01.05 |
[C/C++] 코드업(codeup) 3704번 계단 오르기 2 (0) | 2020.01.04 |
[C/C++] 코드업(codeup) 3702번 파스칼의 삼각형 2 (0) | 2020.01.01 |
[C/C++] 코드업(codeup) 1916번 피보나치 수열 (Large) 그리고 메모이제이션 (0) | 2019.12.29 |