Cod sursa(job #1189465)

Utilizator lvamanuLoredana Vamanu lvamanu Data 22 mai 2014 21:26:52
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <limits>

using namespace std;

#define MAXN 500001
#define INF  numeric_limits<int>::max() 
int A[MAXN];

void combine(int p, int r, int s, int t) {
    int sizeL = r - p + 1, sizeR = t - s + 1; 
    int L[sizeL + 1], R[sizeR + 1];
    memcpy(L, A + p, sizeof(L));
    memcpy(R, A + s, sizeof(R)); 
    L[sizeL] = INF, R[sizeR] = INF; 
    int left = 0, right = 0; 
    for (int i = p; i <= t; i++) {
        if (L[left] < R[right]) {
            A[i] = L[left]; 
            left++; 
        } else {
            A[i] = R[right]; 
            right++; 
        }
    }
}

void mergeSort(int start, int end) {
    if (start >= end) {
        return; 
    }
    int mij = start + (end - start) / 2; 
    mergeSort(start, mij); 
    mergeSort(mij + 1, end); 
    combine(start, mij, mij + 1, end); 
    
}


int main() {
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    int N;
    scanf("%d", &N);
    int x;
    for (int i = 0; i < N; i++) {
        scanf("%d", &x);
        A[i] = x;
    }
    mergeSort(0, N - 1); 
    for (int i = 0; i < N - 1; i++) {
        printf("%d ", A[i]);
    }
    printf("%d\n", A[N - 1]);

    fclose(stdin);
    fclose(stdout);
    return 0;
}