Pagini recente » Istoria paginii runda/eusebiuoji2019cls9 | Cod sursa (job #199055) | Cod sursa (job #1819775) | Cod sursa (job #126266) | Cod sursa (job #2897337)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int v[500001];
int n;
void merge(int v[], int stg, int mij, int drp){
int lstg = mij - stg + 1;
int ldrp = drp - mij;
int L[lstg], R[ldrp];
for(int i = 0; i < lstg; i++){
L[i] = v[stg + i];
}
for(int j = 0; j < ldrp; j++){
R[j] = v[mij + 1 + j];
}
//facem interclasarea celor 2 vectori
int i = 0, j = 0, stg1 = stg;
while(i<lstg and j<ldrp){
if(L[i] <= R[j]){
v[stg1] = L[i];
i++;
}
else{
v[stg1] = R[j];
j++;
}
stg1++;
}
while(i<lstg){
v[stg1]=L[i];
stg1++;
i++;
}
while(j<ldrp){
v[stg1]=R[j];
stg1++;
j++;
}
}
void mergesort(int v[], int stg, int drp){
if(stg>=drp)
return ;
int mij = (stg + drp - 1) / 2;
mergesort(v, stg, mij);
mergesort(v, mij + 1, drp);
merge(v, stg, mij, drp);
}
int main() {
f>>n;
for(int i = 0;i < n;i++)
f>>v[i];
mergesort(v, 0, n - 1);
for(int i = 0;i < n;i++)
g<<v[i]<<" ";
return 0;
}