Cod sursa(job #1061176)

Utilizator dropsdrop source drops Data 19 decembrie 2013 13:13:40
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
#define MAX 500001
int N, V[MAX];

void merge_sort(int l, int r)
{
    if (l == r) return;
    else
    {
        int mid = (l+r)/2;
        merge_sort(l, mid);
        merge_sort(mid+1, r);
        int i1 = l, i2 = mid+1;
        while (i1 <= mid && i2 <= r)
        {
            if (V[i1] <= V[i2]) i1++; else
            {
                swap(V[i1++], V[i2]);
                for (int j = i2; j + 1 <= r && V[j] > V[j+1]; j++) swap(V[j], V[j+1]);
            }
        }
    }
}

int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d", &N);
    for (int i = 0; i < N; i++) scanf("%d", &V[i]);
    merge_sort(0, N-1);
    for (int i = 0; i < N; i++) printf("%d ", V[i]);

    return 0;
}