Pagini recente » Cod sursa (job #2891156) | Cod sursa (job #2264805) | Cod sursa (job #2467857) | Cod sursa (job #2879435) | Cod sursa (job #1424028)
////MERGESORT
#include <iostream>
#include <fstream>
#include <vector>
#include <limits>
using namespace std;
const int INF = numeric_limits<int>::max();
void mMerge(vector<int>& A, int p, int q, int r) {
int n1 = q-p+1;
int n2 = r-q;
vector<int> L(n1+1);
vector<int> R(n2+1);
for(int i=0; i<n1; ++i)
L[i] = A[p+i];
for(int i= 0; i<n2; ++i)
R[i] = A[q+i+1];
L[n1] = R[n2] = INF;
int i = 0, j = 0;
for(int k = p; k<=r; ++k)
if(L[i] <= R[j]) {
A[k] = L[i];
++i;
} else {
A[k] = R[j];
++j;
}
}
void mergeSort(vector<int>& A, int p, int r) {
if(p<r) {
int q = (p+r)/2;
mergeSort(A, p, q);
mergeSort(A, q+1, r);
mMerge(A, p, q, r);
}
}
int main() {
ifstream inStr("algsort.in");
ofstream outStr("algsort.out");
int N;
inStr >> N;
vector<int> A(N);
for(int i=0; i<N; ++i)
inStr >> A[i];
mergeSort(A, 0, N-1);
for(auto i:A)
outStr << i << ' ';
outStr << '\n';
return 0;
}