Pagini recente » Cod sursa (job #3292996) | Cod sursa (job #2041224) | Cod sursa (job #1393167) | Cod sursa (job #2191278) | Cod sursa (job #1785510)
/* Sortare folosita: MergeSort */
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
// stiu ca exista merge in STL...
vector<int> Merge(vector<int> A, vector<int> B) {
int N = A.size();
int M = B.size();
vector<int> Aux;
int x = 0, y = 0;
while (x < N && y < M) {
if (A[x] < B[y]) {
Aux.push_back(A[x]);
x++;
}
else{
Aux.push_back(B[y]);
y++;
}
}
while (x < N) {
Aux.push_back(A[x]);
x++;
}
while (y < M) {
Aux.push_back(B[y]);
y++;
}
return Aux;
}
vector<int> MergeSort(vector<int> V) {
if (V.size() == 1)
return V;
int mid = (V.size() + 1) >> 1;
vector<int> A(mid), B(V.size() - mid);
copy(V.begin(), V.begin() + mid, A.begin());
copy(V.begin() + mid, V.end(), B.begin());
return Merge(MergeSort(A), MergeSort(B));
}
int main() {
int N;
vector<int> V, Sol;
fin >> N;
V.resize(N);
for (int i = 0; i < N; ++i)
fin >> V[i];
Sol = MergeSort(V);
for (int i = 0; i < N; ++i)
fout << Sol[i] << " ";
return 0;
}