Cod sursa(job #873876)

Utilizator toranagahVlad Badelita toranagah Data 7 februarie 2013 18:48:29
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <iostream>
using namespace std;
const int MAX_N = 500100;
int v[MAX_N];
int N;
int merge_sort(int, int);
int main() {
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");
    fin >> N;
    for (int i = 1; i <= N; ++i) {
        fin >> v[i];
    }
    merge_sort(1, N);
    for (int i = 1; i <= N; ++i) {
        fout << v[i] << ' ';
    }
    return 0;
}
 
int merge_sort(int lo, int hi) {
    if (lo == hi) return 0;
    int mid = lo + (hi - lo) / 2, numInv;
    numInv = merge_sort(lo, mid) + merge_sort(mid + 1, hi);
    int aux[MAX_N];
    for (int i = lo, j = mid + 1, k = lo; i <= mid || j <= hi; ++k) {
        if ((i <= mid && v[i] < v[j]) || j > hi) {
            aux[k] = v[i++];
        } else {
            aux[k] = v[j++];
            numInv += (mid - i + 1);
        }
    }
    for (int k = lo; k <= hi; ++k) {
        v[k] = aux[k];
    }
    return numInv;
}