Cod sursa(job #1797769)

Utilizator mdiannnaMarusic Diana mdiannna Data 4 noiembrie 2016 18:55:50
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <stdio.h>

using namespace std;
int A[500000];
int n;


void citire(){
    cin >> n;
    for(int i=0; i<n; i++)
        cin >> A[i];
}


void afis(int A[], int n){
    for(int i=0; i<n; i++)
        cout << A[i] << " ";
    cout << endl;
}

void Merge(int *&M, int st, int dr, int m){
    int n1 = m-st+1;
    int n2 = dr-m;

    int S1[n1], S2[n2];

    for(int i=0; i<n1; i++)
        S1[i] = A[i+st];

    for(int i=0; i<n2; i++)
        S2[i] = A[i+m+1];

    int cnt = st;

    int i=0;
    int j=0;

    while(i < n1 && j < n2 ){
        if(S1[i] < S2[j]){
            A[cnt] = S1[i];
            i++;
        }
        else{
                A[cnt] = S2[j];
                j++;
        }
        cnt++;
     }


    while(i<n1){
        A[cnt] = S1[i];
        i++;
        cnt++;
    }
    while(j<n2){
        A[cnt] = S2[j];
        j++;
        cnt++;
    }

}

void mergeSort(int A[], int st, int dr){
    if(st>=dr)
        return;
    int m = (st+dr)/2;
    mergeSort(A, st, m);
    mergeSort(A, m+1, dr);

    Merge(A, st, dr, m);
}

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

    citire();
    mergeSort(A, 0, n-1);
    afis(A, n);
    return 0;
}