Cod sursa(job #2000690)

Utilizator mirunafrancescaMiruna mirunafrancesca Data 14 iulie 2017 13:57:30
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <stdio.h>

using namespace std;

int a[500000], n;

void citire()
{
    scanf("%d \n", &n);
    for(int i=1; i<=n; i++)
        scanf("%d ", &a[i]);
}

void interclasare(int s, int d, int m)
{
    int i, j, k, n1, n2;
    i=j=1;

    n1=m-s+1;
    n2=d-m;

    int v1[n1], v2[n2];

    for(k=0; k<n1; k++) v1[k+1]=a[s+k];
    for(k=0; k<n2; k++) v2[k+1]=a[m+1+k];

    k=s-1;

    while(i<=n1 && j<=n2)
    {
        k++;
        if(v1[i]<=v2[j])
        {
            a[k]=v1[i];
            i++;
        }
        else
        {
            a[k]=v2[j];
            j++;
        }
    }

    while(i<=n1)
    {
        k++;
        a[k]=v1[i];
        i++;
    }
    while(j<=n2)
    {
        k++;
        a[k]=v2[j];
        j++;
    }

}

void msort(int s, int d)
{
    int m;
    if(s<d)
    {
        m=(s+d)/2;
        msort(s,m);
        msort(m+1,d);
        interclasare(s,d,m);

    }

}



void afis()
{
    for(int i=1; i<=n; i++)
        printf("%d ", a[i]);

}


int main()
{
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);

    citire();
    msort(1,n);
    afis();


    return 0;
}