1. 구현
Merge 알고리즘은 O(N log N)으로 정렬하는 이론상 가장 효율적인 정렬 알고리즘이다.
구현방법은 우선 숫자들을 모두 잘게 쪼갠 뒤 합쳐지는 과정에서 비교를 통해 정렬을 진행하며 합치는 과정이다.
이 때 N개의 원소에 대하여 총 트리의 높이는 logN 값을 가지기 때문에 효율적인 연산이 가능해진다.
2. 알고리즘
- 백준(수 정렬하기 2)
#include <iostream>
using namespace std;
int prior[1000001];
int after[1000001];
void merge(int L, int R, int mid) {
int i = L;
int j = mid + 1;
int k = i;
while (i <= mid && j <= R) {
if (prior[i] > prior[j]) {
after[k++] = prior[j++];
}
else {
after[k++] = prior[i++];
}
}
while (i <= mid) {
after[k++] = prior[i++];
}
while (j <= R) {
after[k++] = prior[j++];
}
for (int i = L; i <= R; i++) {
prior[i] = after[i];
}
}
void divide(int L, int R) {
if (L >= R) {
return;
}
int mid = (L + R) / 2;
divide(L, mid);
divide(mid + 1, R);
merge(L, R, mid);
}
int main(void) {
cin.tie(0);
ios::sync_with_stdio(false);
int N;
cin >> N;
for (int i = 0; i < N; i++) {
int buf;
cin >> buf;
prior[i] = buf;
}
after[0] = prior[0];
divide(0, N - 1);
for (int i = 0; i < N; i++) {
cout << after[i] << "\n";
}
return 0;
}
'Algorithm > Samsung Expert' 카테고리의 다른 글
[Algorithm] 구간 질의 (0) | 2022.08.31 |
---|---|
[Tree] Red-Black 트리 (0) | 2022.08.19 |
[삼성 알고리즘] 희소성 테이블 (Separse Table) (0) | 2021.01.29 |
[삼성 알고리즘] 분할 상환 알고리즘 (0) | 2020.10.04 |
[삼성 알고리즘] 비트 알고리즘 (0) | 2020.09.30 |