알고리즘/정렬(Sorting)

[알고리즘] 버블 정렬(Bubble Sort) - 코딩밥상

코딩밥상 2023. 1. 4. 23:05

버블 정렬이란?

버블 정렬이란 이름은 물 속 깊은 곳에서 수면을 향호 올라오는 거품들의 모습처럼 데이터를 정렬하기에 붙여진 이름입니다.

자료구조를 순회하면서 이웃한 요소들끼리 데이터를 교환하며 정렬을 수행합니다.

이웃한 요소끼리 데이터를 교환하므로 교환 전에 먼저 이웃끼리 비교하여 바른 순서로 위치해 있는지 확인해야 합니다.

 

예를들어

5 1 6 4 2 3 을 오름차순으로 버블정렬 하면,

5 1 6 4 2 3 -> 1 5 6 4 2 3 -> 1 5 4 6 2 3 -> 1 5 4 2 6 3 -> 1 5 4 2 3 6

1 5 4 2 3 6 -> 1 4 5 2 3 6 -> 1 4 2 5 3 6 -> 1 4 2 3 5 6

1 4 2 3 5 6 -> 1 2 4 3 5 6 -> 1 2 3 4 5 6

1 2 3 4 5 6 -> 1 2 3 4 5 6

1 2 3 4 5 6

1 2 3 4 5 6

위 과정처럼 이웃한 숫자끼리 비교하여 조건에 맞게 자리를 바꿔주며 끝 지점 값을 확정시킵니다.

그 다음 과정에서부터도 똑같이 이웃한 숫자들을 비교하여 바꿔주며 또 다른 끝 지점 값을 확정시킵니다. 

 

버블 정렬은 시간복잡도 O(n^2) 으로 매우 비효율적이지만

구현이 쉽습니다.


코드 구현

void BubbleSort(int DataSet[], int Length){
    int temp = 0;
    
    for(int i=0; i<Length-1; i++){
        for(int j=0; j<Length-(i+1); j++){
            if(DataSet[j] > DataSet[j+1]){
                temp = DataSet[j+1];
                DataSet[j+1] = DataSet[j];
                DataSet[j] = temp;
            }
        }
    }
}