Pagini recente » Cod sursa (job #2803958) | Cod sursa (job #3339950) | Monitorul de evaluare | Cod sursa (job #3317824) | Cod sursa (job #3307130)
#include <fstream>
#include <vector>
using namespace std;
const int NMAX = 500000;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
int v[NMAX + 2];
vector <int> segm;
void mergesort(int st, int dr) {
if(st == dr)
return;
int mid = (st + dr) / 2;
mergesort(st, mid);
mergesort(mid + 1, dr);
//Interclasarea
segm.clear();
int pos1 = st, pos2 = mid + 1;
while(pos1 <= mid && pos2 <= dr) {
if(v[pos1] < v[pos2]) {
segm.push_back(v[pos1]);
pos1++;
}
else {
segm.push_back(v[pos2]);
pos2++;
}
}
while(pos1 <= mid) {
segm.push_back(v[pos1]);
pos1++;
}
while(pos2 <= dr) {
segm.push_back(v[pos2]);
pos2++;
}
for(int i = st; i <= dr; i++)
v[i] = segm[i - st];
}
int main() {
int n;
cin >> n;
for(int i = 1; i <= n; i++)
cin >> v[i];
mergesort(1, n);
for(int i = 1; i <= n; i++)
cout << v[i] << " ";
return 0;
}