VioletaBabel
2751번: 수 정렬하기 2 본문
#include <stdio.h>
#include <string.h>
void merge(int *base, int n);
int num[1000000];
int main()
{// merge
int N;
scanf("%d", &N);
for (int i = 0; i < N; ++i)
scanf("%d", &num[i]);
merge(num, N);
for (int i = 0; i < N; ++i)
printf("%d\n", num[i]);
}
void merge(int *base, int n)
{
int left = n / 2, right = n - left, l = 0, r = left, i = 0, *copy;
if (n < 2) return;
merge(base, left);
merge(base + left, right);
copy = (int *)malloc(sizeof(int)*n);
memcpy(copy, base, sizeof(int)*n);
while ((l < left) && (r < n))
{
if (copy[l] <= copy[r])
base[i] = copy[l++];
else
base[i] = copy[r++];
++i;
}
while (l < left)
base[i++] = copy[l++];
while (r < n)
base[i++] = copy[r++];
free(copy);
}
'백준 > 백준-C' 카테고리의 다른 글
2108번: 통계학 (0) | 2017.05.05 |
---|---|
10989번: 수 정렬하기 3 (0) | 2017.05.05 |
2750번: 수 정렬하기 (0) | 2017.05.02 |
11866번: 조세퍼스 문제 (0) | 2017.04.25 |
10845번: 큐 (0) | 2017.04.21 |
Comments