Pagini recente » Cod sursa (job #2555456) | Cod sursa (job #1348934) | Cod sursa (job #1806533) | Cod sursa (job #2428695) | Cod sursa (job #2618927)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
//MERGESORT
void sortare(int st, int dr, vector < long long > & v) {
if (v[st] > v[dr]) {
int aux = v[st];
v[st] = v[dr];
v[dr] = aux;
}
}
void interclasare(int st, int dr, int m, vector < long long > & v) {
int i = st, j = m + 1, k = 0;
vector < long long > w;
while (i <= m && j <= dr) {
if (v[i] < v[j])
w.push_back(v[i++]);
else
w.push_back(v[j++]);
}
while (i <= m)
w.push_back(v[i++]);
while (j <= dr)
w.push_back(v[j++]);
for (i = st; i <= dr; i++)
v[i] = w[i - st];
}
void MergeSort(int st, int dr, vector < long long > & v) {
int mij;
if (dr - st <= 1)
sortare(st, dr, v);
else {
mij = st + (dr - st) / 2;
MergeSort(st, mij, v);
MergeSort(mij + 1, dr, v);
interclasare(st, dr, mij, v);
}
}
int main()
{
int n,i,m;
vector<long long> v;
fin>>n;
for(i=0;i<n;i++)
{
fin>>m;
v.push_back(m);
}
MergeSort(0,n-1,v);
for(i=0;i<n;i++)
{
fout<<v[i]<<" ";
}
return 0;
}