Cod sursa(job #317022)

Utilizator vlad_DVlad Dumitriu vlad_D Data 22 mai 2009 07:36:37
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

int *A;

void msort(int A[], int n) {
     if (n <= 1) return;
     
     int *B, *C;
     B = new int[n/2];
     C = new int[n - n/2];
     memcpy(B, A, sizeof(int) * (n/2));
     memcpy(C, A + n / 2, sizeof(int) * (n - n/2));
     msort(B, n/2); 
     msort(C, n - n/2);
     int i = 0, j = 0, k = 0;
     while (i < n / 2 || j < n - n/2) {
           if (i == n/2) {A[k++] = C[j++];continue;}
           if (j == n - n/2) {A[k++] = B[i++]; continue;}
           if (B[i] < C[j]) {A[k++] = B[i++]; continue;}
           A[k++] = C[j++];
           }    
     delete[] B;
     delete[] C;
     }
int main() {
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");
    int n;
    fin >> n;
    
    A = new int[n];
    for (int i = 0; i < n; ++i) fin >> A[i];
    msort(A, n);
    for (int i = 0; i < n; ++i) {
        if (i) fout << " ";
        fout << A[i];        
        }
    
    delete[] A;
    return 0;
    }