-
[알고리즘] 버블 정렬알고리즘 & 자료구조/알고리즘 2021. 1. 19. 14:16
버블 정렬
버블 정렬은 두 개의 인접한 자료 값을 비교하면서 위치를 교환하는 방식으로 정렬하는 방법이다.
버블 정렬은 단 두 개의 요소만 정렬해주는 좁은 범위의 정렬에 집중한다.
접근법 자체는 간단하지만, 단 하나의 요소를 정렬하기 위해 너무 많은 교환이 발생할 수 있다.
예를 들어
6 3 8 5 2 7 4 1
이라는 숫자를 오름차순으로 정렬한다고 가정해보자.
우선 가장앞의 6 과 3을 비교해서 순서를 바꾼다.
3 6 8 5 2 7 4 1
이제 6 과 8을 비교해보면 교환할 필요가 없으므로 그대로 두고
바로 다음에 있는 쌓인 8과 5를 비교해서 순서를 바꾼다.
3 6 5 8 2 7 4 1
이런식으로 끝까지 진행한다면
3 6 5 2 7 4 1 8
위와 같이 정렬된다.
하지만 아직 오름차순으로 정렬이 되지 않았기 때문에, 다시 처음부터 동일한 작업을 반복한다.
이 과정을 반복하다보면 최종적으로는 아래와 같이 오름차순 정렬이 된다.
1 2 3 4 5 6 7 8
이러한 방식을 버블정렬이라고 한다.
한번 수행 할 때 마다 맨 뒤의 숫자는 정렬된다는 특징이 있다.
고로 수행시 마다 수행해야 할 인덱스가 1개 씩 줄어든다.
#include <stdio.h> #define SIZE 8 int main() { int temp; int arr[SIZE] = {6,3,8,5,2,7,4,1}; for(int i = 0; i < SIZE -1; i++) //(n-1)...(n-2)..(n-3)..이런 식으로 전체를 정렬해야 하는 횟수가 줄어듬 { // 왜냐. 한번 정렬시에 마지막 숫자 8은 이미 정렬 되어있음 for(int j = 0; j < (SIZE-1) - i; j++){ //인덱스 번호 비교를 위한 반복문 if(arr[j] > arr[j+1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } for(int i = 0; i < 8; i++) { printf("%d ", arr[i]); } return 0; }
#include <stdio.h> int main(void) { int i, j , temp; int array[10] = {1,10,5,8,7,6,4,3,2,9}; for(i = 0; i < 10; i++) { for(j = 0; j < 9-i; j++) { if(array[j] > array[j+1]) { temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } for(i = 0; i < 10; i++) { printf("%d ", array[i]); } return 0; }
이러한 버블 정렬의 Big O 는 선택정렬과 마찬가지로 등차수열에 따라서
O(N^2) 가 된다.
728x90반응형'알고리즘 & 자료구조 > 알고리즘' 카테고리의 다른 글
[Algorithm] 완전탐색 (Brute-Force Search ) 알고리즘 (0) 2021.06.20 알고리즘 시각화 해서 볼 수 있는 사이트 (0) 2021.03.22 [알고리즘] 삽입 정렬(Insertion Sort) (0) 2021.03.06 [알고리즘] 선택 정렬 (Selection Sort) (0) 2021.03.04