[Algorithm] Bubble Sort

Bubble Sort

버블정렬은 Stable한 정렬로 인접한 두 데이터의 대소관계를 비교해 규칙에 적합한 데이터를 뒤로 보내는 방식으로 정렬을 수행한다
O(N^2)의 시간복잡도와 O(1)의 공간 복잡도를 가지게 되며 코드가 단순해 구현이 간단하다


동작 원리

오름차순 정렬 기준

  1. 0번째 인덱스와 1번째 인덱스의 데이터를 비교한다
  2. 0번째 인덱스가 크다면 1번째 인덱스와 스왑한다
  3. 1번째 인덱스가 크거나 같다면 스왑하지 않는다
  4. N-1번째 인덱스와 N번째 인덱스까지 비교하게 되면 N번째 인덱스에는 배열의 최대값이 삽입되어 있다
  5. 다시 1번으로 돌아가 N-1번째 인덱스까지 반복한다


구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <vector>
#include <algorithm>
#include <ctime>
#include <cstdlib>
#include <random>
#include <numeric>

using namespace std;

void BubbleSort(vector<int> &bubbleSortVec){
int MAXSIZE = bubbleSortVec.size();
for(int repeat = 0; repeat < MAXSIZE; ++repeat){
for(int start = 0; start < MAXSIZE-repeat-1; ++start){
if(bubbleSortVec[start] > bubbleSortVec[start+1]) {
bubbleSortVec[start] ^= bubbleSortVec[start+1] ^= bubbleSortVec[start] ^= bubbleSortVec[start+1];
}
}
}
}
int main(){
std::srand ( unsigned ( std::time(0) ) );
vector<int> vec(1000);
iota(begin(vec),end(vec),1);
std::shuffle(std::begin(vec), std::end(vec), default_random_engine {});
cout<<"Before Bubble Sorting"<<endl;
for(auto num : vec)
cout<<num<<" ";

BubbleSort(vec);

cout<<"After Bubble Sorting"<<endl;
for(auto num : vec)
cout<<num<<" ";
}



같이보기

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/06/22/Algorithm/Bubble_Sort/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.