Cod sursa(job #2076059)

Utilizator dumitrualexAlex Dumitru dumitrualex Data 26 noiembrie 2017 02:37:15
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <stdio.h>
#define nmax 500000+5

using namespace std;

int a[nmax];
int v[nmax];
void merge_sort(int * v, int left, int right)
{
    if (left==right) return;

    int mid=(left+right)/2;
    merge_sort(v,left,mid);
    merge_sort(v,mid+1,right);

    int i=left,j=mid+1,k=left;
    while (i<=mid && j<=right)
    {
        if (v[i]<=v[j]) {
            a[k++]=v[i++];
        }
        else if (v[i]>v[j]) {
            a[k++]=v[j++];
        }
    }

    while (i<=mid) a[k++]=v[i++];
    while (j<=right) a[k++]=v[j++];

    for (i=left;i<=right;i++)
        v[i]=a[i];
}

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

    int x, n=0, i;
    cin >> n;
    for(i=0;i<n;i++) cin>>v[i];

    merge_sort(v, 0, n-1);

    for (i=0;i<n;i++) cout<<v[i]<<' ';
    cout << '\n';

    return 0;
}