Pagini recente » Cod sursa (job #1369863) | Statistici Stroie Mira-Maria (mira-maria.stroie) | Cod sursa (job #1095535) | Monitorul de evaluare | Cod sursa (job #963398)
Cod sursa(job #963398)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
class MergeSort{
vector<int> v;
int temp[500005];
void init(){
for(int i=0; i<500005; ++i) temp[i] = 0;
}
void mergeSort(int l, int r){
if (l == r) return;
int mid = (l + r) >> 1;
mergeSort(l, mid);
mergeSort(mid+1, r);
// acum ma ocup de nodul curent; stiind ca cei doi fii ai lui sunt in ordine crescatore
// acum trebe sa fac interclasare de 2 vectori sortati crescator
temp[0] = 0;
// acum sortez portiunea [l, r];
for(int step=1,iL=l, iR=mid+1; step<=(r-l+1); ++step){
// acum il iau pe iL
if ( (iL <= mid && v[iL] <= v[iR]) || iR > r ){
temp[ ++temp[0] ] = v[iL]; ++iL;
}else {// ma duc in iR;
temp[ ++temp[0] ] = v[iR]; ++iR;
}
}
for(int i=l, iTemp=1; i<=r; ++i, ++iTemp) v[i] = temp[iTemp];
};
public:
vector<int> Sort(vector<int> a){
init();
for(int i=0; i<(int)a.size(); ++i) v.push_back(a[i]);
mergeSort(0, int(v.size())-1 );
return v;
}
};
int main(){
vector<int> v;
int n = 0, x =0;
f >> n; for(int i=1; i<=n; ++i) f >> x, v.push_back(x);
MergeSort X;
v = X.Sort(v);
for(int i=0; i<int(v.size()); ++i) g << v[i] << " ";
}