#include <stdio.h>
#include <stdlib.h>
// conquer
void merge(int a[], int low, int mid, int high) {
int temp[100000];
int i=low;
int j=mid+1;
int k=0;
// fight
while(i <= mid && j <= high) {
if(a[i] <= a[j]) {
temp[k] = a[i];
k++;
i++;
}
else {
temp[k] = a[j];
k++;
j++;
}
}
// 왼쪽이 살아있을때 전체 집어 넣기
while(i <= mid) {
temp[k] = a[i];
k++;
i++;
}
// 오른쪽이 살아있을때 전체 집어 넣기
while(j <= high) {
temp[k] = a[j];
k++;
j++;
}
k--;
//기존 배열에 정리
while(k >= 0) {
a[low+k] = temp[k];
k--;
}
}
// divide
void mergesort(int a[], int low, int high) {
if(low < high) {
int m = (low+high)/2;
// left side
mergesort(a, low, m);
// right side
mergesort(a, m+1, high);
// conquer
merge(a, low, m, high);
}
else {
return;
}
}
int main(int argc, char *argv[]) {
int buf[100001];
int N, C;
scanf("%d", &N);
scanf("%d", &C);
int i=0;
for(i=0; i<N; i++) {
scanf("%d", &buf[i]);
}
mergesort(buf, 0, N-1);
if(C == 0) {
for(i=0; i<N; i++) {
printf("%d\n", buf[i]);
}
}
else {
for(i=N-1; i>=0; i--) {
printf("%d\n", buf[i]);
}
}
return 0;
}
반응형
'e. 자료구조 및 알고리즘' 카테고리의 다른 글
C언어 퀵정렬(Quick Sort) (0) | 2019.07.12 |
---|---|
C언어 합병정렬(Merge Sort 1) (0) | 2019.07.08 |
C언어 단방향 큐 (Queue) (0) | 2019.06.28 |
C언어 단방향 연결리스트 (LinkedList) (0) | 2019.06.27 |