본문 바로가기

TIL

2024- 12 - 31 버블 정렬

버블 정렬은 가장 간단한 정렬 알고리즘 중 하나로 , 인접한 요소들을 비교하여 정렬하는 방식입니다. 

 

 

배열의 처음부터 끝까지 인접한 두 요소를 비교하고, 순서가 잘못된 경우 두 요소를 교환합니다. 이 과정을 배열의 끝까지 반복합니다.

 

한 번의 반복이 끝나면 가장 큰 값이 배열의 끝으로 이동하게 됩니다. 이 과정을 반복하여 전체 배열이 정렬될 때까지 수행합니다.(오름차순)

 

#include <iostream>
using namespace std;

void bubbleSort(int arr[], int n) {
    bool swapped;
    for (int i = 0; i < n - 1; i++) {
        swapped = false; // 교환 여부를 추적
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) { 
                // 두 요소 교환
                swap(arr[j], arr[j + 1]);
                swapped = true; // 교환이 이루어졌음을 표시
            }
        }
        // 교환이 없으면 정렬 완료
        if (!swapped) {
            break;
        }
    }
}

// 배열 출력 함수
void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr) / sizeof(arr[0]);
    
    bubbleSort(arr, n);
    cout << "정렬된 배열: ";
    printArray(arr, n);
    
    return 0;
}

 

  1. 배열의 첫 번째 요소부터 시작합니다.
  2. 인접한 두 요소를 비교합니다.
  3. 두 요소의 순서가 잘못되었다면 교환합니다.
  4. 배열의 끝까지 이 과정을 반복합니다.
  5. 배열의 끝에서부터 다시 시작하여 위 과정을 반복합니다.
  6. 더 이상 교환이 이루어지지 않을 때까지 반복합니다.

 

시간 복잡도가 비효율적입니다.

 

 O(n²) (n은 배열의 크기)

이미 정렬 된 경우는 

O(n)

 

 

간단하고 쉬운 정렬 알고리즘이지만 시간복잡도가 비효율적이기 때문에 

데이터가 많을 경우는 다른 정렬 알고리즘을 사용하는 것이 좋을 것같습니다.

 

평소에 정렬할 때 간단해서 많이 사용 하던 방식이였는데 간단하지만 효율은 좋지 않더군요