Bubble sort (버블 정렬)

Byungwoong An·2021년 1월 31일
0

1. 개념

버블정렬이란 서로 인접한 두 값을 비교하여 그 값에 따라 위치를 바꿔주며 정렬하는 알고리즘이다. 예를 들어 아래와 같은 배열이 있다고 가정하면

4 2 3 1 먼저 첫번째 index의 값인 4부터 시작하여 첫번째 원소와 두번째 원소를 비교한다. 4가 2보다 크니 위치를 바꿔주고 즉 2 4 3 1을 만들고 다시 두번째 원소와 세번째 원소를 비교한다. 4가 3보다 크므로 2 3 4 1이 된다. 마지막으로 세번째 원소와 네번째 원소를 비교한다. 첫번째 회전의 결과는 2 3 1 4 가 된다.

두번째 회전 결과

2 3 1 4 세번째 회전 결과 2 1 3 4 네번째 회전 결과 1 2 3 4 다음과 같은 방법으로 정렬을 진행하는것이 버블정렬이다.

2. 코드

#include <iostream>
using namespace std;

int main()
{
    
    int a[101], n, i , j, tmp;
    scanf("%d",&n);
    for(i=0; i<n; i++){
        scanf("%d",&a[i]);
    }
    for(i=0; i<n-1; i++){  
    // 마지막 원소는 어차피 최대값으로 고정되기 때문에 효율적인 정렬을 위해 j<n-i-1을 함 
        for(j=0; j<n-i-1; j++){
            if(a[j]>a[j+1]){
                tmp = a[j];
                a[j] = a[j+1];
                a[j+1] = tmp;
            }
        }
    }
    for(i=0; i<n; i++){
        printf("%d ",a[i]);
    }
    return 0;
}

시간복잡도

데이터의 갯수가 n이라고 하면, 버블정렬은 모든 시나리오에서 똑같은 비교횟수를 가진다. 총 루프의 횟수는 n(n-1)/2 이므로 시간복잡도는 O(n^2) 이다.

장점과 단점

장점

  • 단순한 알고리즘

단점

  • 시간복잡도가 (O^2)으로 비 효율 적이다.
  • 만약 특정한 원소가 이미 최종 정렬 위치에 있더라도 교환이 발생할 수도 있을 정도로 비효율적이다.
profile
No Pain No Gain

0개의 댓글