정렬 알고리즘의 한 종류인 버블 정렬에 대해 알아보겠다.
Bubble sort?
버블 정렬이란 서로 인접한 두 원소를 검사하여 정렬하는 알고리즘이다.
인접한 2개의 레코드를 비교하여 크기가 순서대로(ex. 오름차순 또는 내림차순) 되어 있지 않으면 서로 교환한다.
버블 정렬 알고리즘에대해 구체적인 개념을 살펴보면 아래와 같이 요약할 수 있다.
버블 정렬 분석
원소의 접근과 원소들의 교환이 각각 O(1) 시간이 걸리도록 구현되었다고 가정하자. 이때, i번째 회전의 실행 시간은 O(n-i+1)이다. 즉, 버블 정렬릐 전체 실행 시간은
이다. 위의 big-Oh 표현식 내의 합은 아래와 같이 다시 쓸 수 있다.
위의 합은 다음과 같이 다시 쓸 수 있다.
그러므로, 원소의 접근과 교환이 각각 O(1) 시간 내에 수행되게 구현된다면 버블 정렬은 O(n^2)시간에 실행된다.
버블 정렬 알고리즘 실행 예제
버블 정렬 C언어 구현
# include <stdio.h>
# define MAX_SIZE 5
// 버블 정렬
void bubble_sort(int list[], int n){
int i, j, temp;
for(i=n-1; i>0; i--){
// 0 ~ (i-1)까지 반복
for(j=0; j<i; j++){
// j번째와 j+1번째의 요소가 크기 순이 아니면 교환
if(list[j]<list[j+1]){
temp = list[j];
list[j] = list[j+1];
list[j+1] = temp;
}
}
}
}
void main(){
int i;
int n = MAX_SIZE;
int list[n] = {7, 4, 5, 1, 3};
// 버블 정렬 수행
bubble_sort(list, n);
// 정렬 결과 출력
for(i=0; i<n; i++){
printf("%d\n", list[i]);
}
}
|
버블 정렬 알고리즘의 특징
이진 탐색 (0) | 2021.01.31 |
---|---|
합병 정렬(Merge sort) (0) | 2019.08.25 |
삽입 정렬(Insertion sort) (0) | 2019.08.23 |
선택 정렬(selection sort) (0) | 2019.08.21 |
퀵 정렬(Quick sort) (0) | 2019.08.05 |
댓글 영역