Cod sursa(job #606458)

Utilizator contnouAndrei Pavel contnou Data 4 august 2011 13:10:19
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
//merge sort
#define N 500005
#include<stdio.h>
using namespace std;
int a[N];
int sirAux[N];
int n;
void merges(int st, int dr) {

    if (st == dr) return;
    int mij = (st + dr) / 2;

    merges(st, mij);
    merges(mij + 1, dr);

    int curr1 = st, curr2 = mij + 1;
    int contor = 1;
    while ((curr1 <= mij) && (curr2 <= dr)) {
        if (a[curr1] < a[curr2]) {
         sirAux[contor++] = a[curr1];
         curr1++;
        }
        else {
         sirAux[contor++] = a[curr2];
         curr2++;
        }
    }
    while(curr1 <= mij) {
        sirAux[contor++] = a[curr1];
        curr1++;
    }
    while(curr2 <= dr) {
        sirAux[contor++] = a[curr2];
        curr2++;
    }
    for(int i = st; i <= dr; i++)
     a[i] = sirAux[i - st + 1];
}
int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);
    for(int i = 1; i <= n; i++) {
            scanf("%d",&a[i]);
    }
    merges(1,n);
    for(int i = 1; i <= n; i++)
     printf("%d ",a[i]);

    return 0;
}