Cod sursa(job #1116589)

Utilizator mariusn01Marius Nicoli mariusn01 Data 22 februarie 2014 18:06:49
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#define DIM 500010
using namespace std;



ifstream fin("algsort.in");
ofstream fout("algsort.out");

int v[DIM];
int w[DIM];
int n,i;

void interclaseaza (int p, int m, int u) {
    // consider sortata secventa de la p la m
    // consider sortata secventa de la m+1 la u
    // interclasez pe cele 2
    int k = p-1;
    int i = p;
    int j = m+1;

    while (i<=m && j<=u) {
        if (v[i] < v[j]) {
            k++;
            w[k] = v[i];
            i++;
        } else {
            k++;
            w[k] = v[j];
            j++;
        }
    }
    for (;i<=m;i++)
        w[++k] = v[i];
    for (;j<=u;j++)
        w[++k] = v[j];

    for (i=p;i<=u;i++)
        v[i] = w[i];
}


void sorteaza(int p, int u) {
    if (p < u) {
        int mid = (p+u)/2;
        sorteaza(p, mid);
        sorteaza(mid+1,u);
        interclaseaza(p,mid,u);
    }
}

int main() {
    fin>>n;
    for (i=1;i<=n;i++)
        fin>>v[i];
    sorteaza(1,n);
    for (i=1;i<=n;i++)
        fout<<v[i]<<" ";
    return 0;
}