μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
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 |
- 그리λ
- μμνμ
- λ³ν©μ λ ¬
- μκ³ λ¦¬μ¦
- db
- λλΉμ°μ νμ
- νλ‘κ·Έλλ¨Έμ€
- DFS
- λ°±μ€
- skala1κΈ°
- λ€μ΄λλ―Ήνλ‘κ·Έλλ°
- λ°μ΄ν°λ² μ΄μ€
- LIS
- DP
- λμ ν©
- κ·Έλν
- μ λ ¬
- νμ΄μ¬
- ꡬν
- λ¨Έμ§μνΈ
- μ€λΈμ
- μν
- ν°μ€ν 리μ±λ¦°μ§
- κΉμ΄μ°μ νμ
- BFS
- SQL
- κ·Έλννμ
- λμ κ³νλ²
- skala
- μ°μ μμν
- Today
- Total
πππ°πΈ π£πΆπ΅ π΄π΅π¦π’π₯πΊ
[λ°±μ€] 2751λ²: μ μ λ ¬νκΈ° 2 - C++ λ³Έλ¬Έ
λ¬Έμ
Nκ°μ μκ° μ£Όμ΄μ‘μ λ, μ΄λ₯Ό μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ μμ κ°μ N(1 β€ N β€ 1,000,000)μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€λΆν° Nκ°μ μ€μλ μκ° μ£Όμ΄μ§λ€. μ΄ μλ μ λκ°μ΄ 1,000,000λ³΄λ€ μκ±°λ κ°μ μ μμ΄λ€. μλ μ€λ³΅λμ§ μλλ€.
μΆλ ₯
첫째 μ€λΆν° Nκ°μ μ€μ μ€λ¦μ°¨μμΌλ‘ μ λ ¬ν κ²°κ³Όλ₯Ό ν μ€μ νλμ© μΆλ ₯νλ€.
μ λ ¬ λ¬Έμ .
μ²μμ ν΅ μ λ ¬λ‘ νμμΌλ μ μΆ μ μ μν λλμ΄ λ€μ΄ ꡬκΈλ§μ ν΄λ΄€λλ ν΅μ λ ¬μ μ΅μ μ κ²½μ° μκ°λ³΅μ‘λκ° O(n2)λ‘, μκ°μ΄κ³Όμ μνμ΄ μλ€κ³ νλλΌ..
그리νμ¬ λ³ν© μ λ ¬μ ꡬννμ¬ νμλ€.
λ³ν©μ λ ¬ : π
μ½λ
#include <cstdio>
void merge(int* sorted, int* arr, int begin, int mid, int end);
void mergeSort(int* sorted, int* arr, int begin, int end);
void printArr(int* arr, int n);
int main(void) {
int n;
scanf("%d", &n);
int* arr = new int[n];
int* sorted = new int[n];
for(int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
mergeSort(sorted, arr, 0, n - 1);
printArr(arr, n);
delete[] arr;
return 0;
}
void merge(int* sorted, int* arr, int begin, int mid, int end) {
int i, j, k;
i = begin;
j = mid + 1;
k = begin;
while(i <= mid && j <= end) {
if(arr[i] <= arr[j]) {
sorted[k] = arr[i];
i++;
}
else {
sorted[k] = arr[j];
j++;
}
k++;
}
if(i > mid) {
for(int a = j; a <= end; a++, k++)
sorted[k] = arr[a];
}
else {
for(int a = i; a <= mid; a++, k++)
sorted[k] = arr[a];
}
for(int a = begin; a <= end; a++)
arr[a] = sorted[a];
}
void mergeSort(int* sorted, int* arr, int begin, int end) {
int mid;
if(begin < end) {
mid = (begin + end) / 2;
mergeSort(sorted, arr, begin, mid);
mergeSort(sorted, arr, mid + 1, end);
merge(sorted, arr, begin, mid, end);
}
}
void printArr(int* arr, int n) {
for(int i = 0; i < n; i++) {
printf("%d\n", arr[i]);
}
}
'μ½λ©ν μ€νΈ μ€λΉ > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 11651λ²: μ’ν μ λ ¬νκΈ° 2 - C++ (0) | 2021.08.10 |
---|---|
[λ°±μ€] 11650λ²: μ’ν μ λ ¬νκΈ° - C++ (0) | 2021.08.09 |
[λ°±μ€] 11052λ²: μΉ΄λ ꡬ맀νκΈ° - C++ (0) | 2021.08.03 |
[λ°±μ€] 2225λ²: ν©λΆν΄ - C++ (0) | 2021.08.02 |
[λ°±μ€] 9461λ²: νλλ° μμ΄ - C++ (0) | 2021.08.01 |