Cod sursa(job #3253675)

Utilizator vladorovOroviceanu Vlad vladorov Data 4 noiembrie 2024 10:11:44
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>

using namespace std;

int v[500000];
int va[250000];
int vb[250000];
int c[500000];

void interclasare(int a[], int n, int b[], int m){
    int k1=0, k2=0, k3=0;
    while(k1<n && k2<m){
        if(a[k1]<b[k2]){
            c[k3++]=a[k1];
            k1++;
        }else{
            c[k3++]=b[k2];
            k2++;
        }
    }

    for(int i=k1; i<n; i++){
        c[k3++]=a[i];
    }

    for(int i=k2; i<m; i++){
        c[k3++]=b[i];
    }
}

void mergesort(int a, int b){
    if(b-a==1){
        if(v[a]>v[b]) swap(v[a], v[b]);
        return;
    }

    if(a==b) return;

    int mid=(a+b)/2;

    mergesort(a, mid);
    mergesort(mid+1, b);

    for(int i=a; i<=mid; i++){
        va[i-a]=v[i];
    }

    for(int i=mid+1; i<=b; i++){
        vb[i-mid-1]=v[i];
    }

    interclasare(va, mid-a+1, vb, b-mid);

    for(int i=0; i<=b-a; i++){
        v[i+a]=c[i];
    }
}

int main(){
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");

    int n; fin>>n;

    for(int i=0; i<n; i++){
        fin>>v[i];
    }

    mergesort(0, n-1);

    for(int i=0; i<n; i++){
        fout<<v[i]<<" ";
    }

    return 0;
}