Pagini recente » Cod sursa (job #1208289) | Cod sursa (job #2445451) | Cod sursa (job #1433852) | Cod sursa (job #3241760) | Cod sursa (job #1460757)
#include <stdio.h>
#include <fstream>
#include <vector>
#define INF 1<<31
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int N, M;
vector<long long> v;
void read(){
in >> N;
long long x;
v.resize(N+1);
for(int i = 1; i <= N; ++i){
in >> x;
v[i] = x;
}
}
void Merge(int l, int m, int r){
int n1 = m-l+1;
int n2 = r-m;
vector<long long> S(n1+2);
vector<long long> D(n2+2);
for(int i = 1; i <= n1; ++i)
S[i] = v[l+i-1];
for(int j = 1; j <= n2; ++j)
D[j] = v[m+j];
S[n1+1] = 1LL*INF;
D[n2+1] = 1LL*INF;
int i = 1, j = 1;
for(int k = l; k <= r; ++k){
if(S[i] <= D[j]){
v[k] = S[i];
i++;
}
else{
v[k] = D[j];
j++;
}
}
}
void MergeSort(int l, int r){
if( l < r){
int m = (l+r)/2;
MergeSort(l, m);
MergeSort(m+1, r);
Merge(l, m, r);
}
}
void write(){
for(int i = 1; i <= N; ++i)
out << v[i] << " ";
}
int main(){
read();
MergeSort(1, N);
write();
}