Algorithm

3. 버블 정렬(Bubble Sort)

yeommm 2019. 10. 4. 01:00

#버블 정렬 알고리즘

1. 매 단계마다 처음부터 마지막까지 차례대로 인접한 두 원소를 비교하여 뒤에 있는 원소가 앞의 원소보다 작은 경우 두 원소를 교환

2. 각 단계 수행 후 최대값이 마지막으로 이동하므로, 마지막 원소는 정렬대상에서 제외

3. 만약 끝까지 가면서 교환이 일어나지 않았으면 정렬이 되어 있는 것

 

 

#구현

#include <iostream>
using namespace std;

void bubblesort(int* a, int n);
void swap(int* a, int* b);

int main(){
    int n;
    cin>>n;
    int* a= new int[n];
    for(int i=0; i<n; i++)
        cin>>a[i];

    bubblesort(a,n);

    for(int i=0; i<n; i++)
        cout<<a[i]<<" ";

    return 0;
}

void bubblesort(int* a, int n){
    for(int i=n-1; i>0; i--){
        for(int j=0; j<i; j++){
            if(a[j]>a[j+1])
                swap(a[j], a[j+1]);
        }
    }
}

void swap(int* a, int* b){
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
//개선된 버블정렬: 정렬이 이미 되어있다면 더이상 비교x
seletionsort(int* a, int n){
    for(int i=n-1; i>0; i--){
        int sorted=1;
        for(int j=0; j<i; j++){
            if(a[j]>a[j+1]){
                swap(&a[j], &a[j+1]);
                sorted=0;
            }
        }
        if(sorted) break;
    }
}

 

#시간복잡도 분석

원소 비교횟수 = n-1 + n-2 + n-3 + ... + 3 + 2 + 1 = n(n-1)/2

=> O(n*n)