Cod sursa(job #1219984)

Utilizator moise_alexandruMoise Alexandru moise_alexandru Data 16 august 2014 09:50:59
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>

const int MAXN = 1000005;
using namespace std;
int ok=0;
int v[MAXN];
int n;
int p1[MAXN], p2[MAXN];
void mergesort(int i,int j)
{

    if(j - i >= 1)
    {
        int mij = (i + j) / 2;
        mergesort(i,mij);
        mergesort(mij + 1, j);

        for (int k = i; k <= mij; k++){
            p1[k] = v[k];
        }
        for (int k = mij + 1; k <= j; k++) {
            p2[k] = v[k];
        }
        int st1 = i, dr1 = mij;
        int st2 = mij + 1, dr2 = j;

        int iv = i;
        while(st1 <= dr1 && st2 <= dr2) {
            if (p1[st1] >= p2[st2]) {
                v[iv] = p2[st2];
                st2++;
            } else {
                v[iv] = p1[st1];
                st1++;
            }
            iv++;
        }
        while(st1 <= dr1) {
            v[iv] = p1[st1];
            st1++; iv++;
        }
        while(st2 <= dr2) {
            v[iv] = p2[st2];
            st2++; iv++;
        }
    }
}

int main()
{
    ifstream cin("algsort.in");
    ofstream cout("algsort.out");
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>v[i];
    mergesort(1,n);
    for(int i=1;i<=n;i++)
        cout<<v[i]<<" ";
    return 0;
}