Cod sursa(job #1273605)

Utilizator MarianMMorosac George Marian MarianM Data 22 noiembrie 2014 19:58:13
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#define _CRT_SECURE_NO_DEPRECATE

#include <iostream>
#include <cstdio>
#include <fstream>
#include <vector>
#include <deque>
#include <set>
#include <map>
#include <list>
#include <string>
#include <iterator>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <cstring>
using namespace std;

#define DMAX  10//500002
#define DMAX2 2000003
#define MOD   1000003
#define minm(a,b) a>b ? b : a
#define maxm(a,b) a<b ? b : a

int N, v[DMAX], cv[DMAX]; // 2*memorie

void merge(int * v, int bgn, int end){
    int i = bgn, k = bgn, mij = (bgn + end)/2, j = mij+1;

    while(i<=mij && j<=end){
        if(v[i] < v[j]) cv[k++] = v[i++];
        else            cv[k++] = v[j++];
    }
    for(; i<=mij; i++)  cv[k++] = v[i];
    for(; j<=end; j++)  cv[k++] = v[j];

    for(i=bgn; i<=end; i++) v[i] = cv[i]; // 2*timp pentru merge
}

void mergesort(int * v, int bgn, int end){
    int mij = (bgn + end)/2;

    if(bgn < end){
        mergesort(v, bgn, mij);
        mergesort(v, mij+1, end);
        merge(v, bgn, end); // lim lipsa: ...mij si mij+1...
    }
}

int main(){
    int i;

	freopen("algsort.in", "r", stdin); // algsort
	freopen("algsort.out", "w", stdout); // cautbin

    scanf("%d", &N);

    for(i=1; i<=N; i++) scanf("%d", &v[i]);

    mergesort(v, 1, N);

    for(i=1; i<=N; i++) printf("%d ", v[i]);

	return 0;
}