-
3. 버블 정렬(Bubble Sort)Algorithm 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)
'Algorithm' 카테고리의 다른 글
6. 분할과 정복_퀵정렬(Quick Sort) (0) 2019.10.04 5. 분할과 정복_병합정렬(Merge Sort) (0) 2019.10.04 4. 삽입 정렬(Insertion Sort) (0) 2019.10.04 2. 선택 정렬(Selection Sort) (0) 2019.10.04 1. 알고리즘 개요 (0) 2019.10.03