Pagini recente » Cod sursa (job #2425025) | Cod sursa (job #2880975) | Cod sursa (job #2493256) | Cod sursa (job #2455675) | Cod sursa (job #3250455)
#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;
}