Cod sursa(job #1260189)

Utilizator dinuandAndrei-Mario Dinu dinuand Data 10 noiembrie 2014 23:05:05
Problema Sortare prin comparare Scor 40
Compilator c Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>
#include <stdlib.h>

void merge_sort(int *v, int left, int right) 
{
    if (right - left < 2) // one elem is already sorted
        return;

    int middle = (left + right) / 2;
    merge_sort(v, left, middle);
    merge_sort(v, middle, right);
    int i0 = left, i1 = middle, tmp, j;
    while(i0 <= middle && i1 < right) {
        if (v[i0] <= v[i1]) {
            i0++;
        } else {
            tmp = v[i1];
            for (j = i1; j > i0; j--) 
                v[j] = v[j - 1];
            v[i0] = tmp;
            i1++;
            middle++;
            i0++;
        }
    }
}

int main()
{
    int n, v[500001], i;
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    scanf("%d", &n);
    for (i = 0; i < n; i++) scanf("%d", &v[i]);
    merge_sort(v, 0, n);
    for (i = 0; i < n; i++) printf("%d ", v[i]);
    printf("\n");
    return 0;
}