Cod sursa(job #1816852)

Utilizator GeorginskyGeorge Georginsky Data 27 noiembrie 2016 00:44:33
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
void _merge_(int v[], int l, int r, int m){
    int x=m-l+1, y=r-m;
    int i, j, pos=l, a[x], b[y];
    for(i=0; i<x; i++)a[i]=v[l+i];
    for(j=0; j<y; j++)b[j]=v[m+1+j];
    i=0; j=0; pos=l;
    while(i<x&&j<y){
        if(a[i]<b[j]){
            v[pos]=a[i];
            i++;
        }else{
            v[pos]=b[j];
            j++;
        }
        pos++;
    }
    while(i<x){v[pos]=a[i];i++;pos++;}
    while(j<y){v[pos]=b[j];j++;pos++;}
}

void merge_sort(int v[], int l, int r){
    if(l<r){
        int m=(l+r)/2;
        merge_sort(v, l, m);
        merge_sort(v, m+1, r);
        _merge_(v, l, r, m);
    }
}

int main(){
    int n, a[500005];
    in>>n;
    for(int i=0; i<n; i++)in>>a[i];
    merge_sort(a, 0, n-1);
    for(int i=0; i<n; i++)out<<a[i]<<" ";
    return 0;
}