[알고리즘] 기본적인 정렬 알고리즘(버블 정렬, 선택 정렬, 삽입 정렬)
2022. 7. 25. 12:10
정렬 : 주어진 데이터를 정해진 기준에 따라 순서를 재배열하는 작업
가장 기본적인 정렬 알고리즘에 대해 설명하겠다.
1. 버블 정렬(bubble sort)
인접한 두 원소의 크기를 비교하여 교환하는 작업을 반복하여 정렬하는 알고리즘
void bubble_sort(int data[], int n)
{
for(int i=0;i<n-1;i++){
for(int j=n-1;j>i;j--){
if(data[j] < data[j-1])
swap(data[j], data[j-1]);
}
}
}
2. 선택 정렬 (selection sort)
정렬 되지 않은 원소 중에서 최소값 원소를 찾아서 맨 왼쪽 원소와 교환
void selection_sort(int data[], int n)
{
for (int i=0; i<n-1; i++){
int idx=i;
for(int j=i+1; j<n; j++)
if(data[j] < data[idx])
idx = j;
swap(data[i], data[idx]);
}
}
3. 삽입 정렬(insertion sort)
정렬되지 않은 부분의 첫번째 원소를 정렬된 부분의 알맞은 위치에 삽입하는 과정을 반복
void insertion_sort(int data[], int n)
{
for(int i=1;i<n;i++){
int key=data[i];
int j=i-1;
while(j>=0 && data[j] > key){
data[j+1] = data[j];
j--;
}
data[j+1] = key;
}
}
4. 시간복잡도
삽입정렬 = O(n^2)
선택정렬 = O(n^2)
버블정렬 = O(n^2)
'Algorithm' 카테고리의 다른 글
[C++] 백준(BOJ)-15975번 화살표 그리기 (0) | 2022.07.15 |
---|---|
[C++ STL] std::vector 사용법과 동작방식 (0) | 2022.05.15 |
[C++] 백준(BOJ) - 8892번 팰린드롬 (0) | 2022.02.28 |
[C++] 백준(BOJ) - 1448번 삼각형 만들기 (0) | 2022.02.28 |
[C++] 백준(BOJ) - 11055번 가장 큰 증가 부분 수열 (0) | 2022.02.27 |