Cod sursa(job #3250455)

Utilizator EdaterHunterDavid Horia EdaterHunter Data 21 octombrie 2024 09:37:04
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <iostream>
#include <cassert>
#include <fstream>

std::ifstream fin("algsort.in");
std::ofstream fout("algsort.out");

void merge(int *sir, int st, int mij, int dr){
    int nr1,nr2;
    nr1 = mij - st + 1;
    nr2 = dr - mij;
    
    int temp_st[nr1], temp_dr[nr2];
    for(int i=0; i<nr1; i++)
        temp_st[i] = sir[st + i];
    for(int i=0; i<nr2; i++)
        temp_dr[i] = sir[mij + i + 1];
        
    int i=0,j=0,k=st;
    while(i < nr1 & j < nr2){
        if(temp_st[i] < temp_dr[j]){
            sir[k] = temp_st[i];
            i++;
            k++;
        }
        else{
            sir[k] = temp_dr[j];
            j++;
            k++;
        }
    }
    
    while(i < nr1){
        sir[k] = temp_st[i];
        i++;
        k++;
    }
    
    while(j < nr2){
        sir[k] = temp_dr[j];
        j++;
        k++;
    }
}

void merge_sort(int *sir, int st, int dr){
    if(st >= dr)
        return;
    int mij = st + (dr - st) / 2;
    merge_sort(sir, st, mij);
    merge_sort(sir, mij+1, dr);
    merge(sir, st, mij, dr);
}

void test_sortare(){
    int n = 15;
    int sir[n] = {4, 1, 7, 5, 1, 3};
    merge_sort(sir, 1, n-1);
    for(int i=0; i<n; i++)
        std::cout<<sir[i] << " ";
}

int main(){
    int n;
    fin>>n;
    int sir[n];
    for(int i=0; i<n; i++)
        fin>>sir[i];
        
    merge_sort(sir, 0, n-1);
    
    for(int i=0; i<n; i++)
        fout<<sir[i]<<" ";
    return 0;
}