VioletaBabel

2751번: 수 정렬하기 2 본문

백준/백준-C
2751번: 수 정렬하기 2
Beabletoet 2017. 5. 2. 17:55

#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