백준 알고리즘/정렬

[백준 알고리즘] 2751번 수 정렬하기 2 - C

개발로 먹고 살자 2021. 11. 24. 13:41

#include<stdio.h>
#define MAX_SIZE 1000000
int sortArr[MAX_SIZE];

void marge(int arr[], int left, int mid, int right) {
        int l, r, k, a;
        l = left;
        r = mid + 1;
        k = left;

        while(l <= mid && r <= right) {
                sortArr[k++] = arr[l] <= arr[r] ? arr[l++] : arr[r++];
        }
        if(l > mid) {
                for(a = r; a <= right; a++) {
                        sortArr[k++] = arr[a];
                }
        } else {
                for(a = l; a <= mid; a++) {
                        sortArr[k++] = arr[a];
                }
        }
        for(a = left; a <= right; a++) {
                arr[a] = sortArr[a];
        }
}

void marge_sort(int arr[], int left, int right) {
        int mid;

        if(left < right) {
                mid = (left+right) / 2;
                marge_sort(arr, left, mid);
                marge_sort(arr, mid+1, right);
                marge(arr, left, mid, right);
        }
}
int main(int argc, char* argv[]) {

        int input;
        scanf("%d", &input);

        int arr[MAX_SIZE];
        for(int i = 0; i < input; i++) {
                scanf("%d", &arr[i]);
        }

        marge_sort(arr, 0, input-1);

        for(int i = 0; i < input; i++) {
                printf("%d\n", arr[i]);
        }

        return 0;
}