Cod sursa(job #1542647)

Utilizator preda.andreiPreda Andrei preda.andrei Data 5 decembrie 2015 15:46:08
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <cstdio>

using namespace std;

int v[500001];
int aux[500001];

void interclasare(int st, int dr){
    int i, j, k, mij;

    mij=st+(dr-st)/2;
    i=st;
    j=mij+1;
    k=0;

    while(i<=mij && j<=dr){
        k++;
        if(v[i]<=v[j])
            aux[k]=v[i++];
        else aux[k]=v[j++];
    }
    while(i<=mij)
        aux[++k]=v[i++];
    while(j<=dr)
        aux[++k]=v[j++];
    k=1;
    for(int i=st; i<=dr; ++i)
        v[i]=aux[k++];
}

void mergesort(int st, int dr){
    if(st==dr)
        return;

    int m=st+(dr-st)/2;

    mergesort(st, m);
    mergesort(m+1, dr);

    interclasare(st, dr);
}

int main()
{
    FILE *fin=fopen("algsort.in", "r");
    FILE *fout=fopen("algsort.out", "w");

    int n;

    fscanf(fin, "%d", &n);
    for(int i=1; i<=n; ++i)
        fscanf(fin, "%d", &v[i]);

    mergesort(1, n);

    for(int i=1; i<=n; ++i)
        fprintf(fout, "%d ", v[i]);
    return 0;
}