Pagini recente » Cod sursa (job #2371505) | Cod sursa (job #1410579) | Cod sursa (job #1538701) | Cod sursa (job #972793) | Cod sursa (job #2577791)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
void merge(vector <int> &Arr, int lft, int mid, int rgt) {
vector <int> ans;
ans.reserve(rgt - lft + 1);
int i = lft;
int j = mid + 1;
while(i <= mid and j <= rgt)
if (Arr[i] < Arr[j])
ans.push_back(Arr[i++]);
else ans.push_back(Arr[j++]);
while (i <= mid) ans.push_back(Arr[i++]);
while (j <= rgt) ans.push_back(Arr[j++]);
for (int idx = lft, ansIdx = 0; idx <= rgt; ++idx, ++ansIdx)
Arr[idx] = ans[ansIdx];
}
void mergeSort(vector <int> &Arr, int lft, int rgt) {
if (rgt - lft <= 1) {
if (Arr[lft] > Arr[rgt])
swap(Arr[lft], Arr[rgt]);
}
else {
int mid = (lft + rgt) / 2;
mergeSort(Arr, lft, mid);
mergeSort(Arr, mid + 1, rgt);
merge(Arr, lft, mid, rgt);
}
}
int main() {
int n;
fin >> n;
vector <int> Arr(n);
for (int &itm : Arr)
fin >> itm;
mergeSort(Arr, 0, n - 1);
for (const int &itm : Arr)
fout << itm << ' ';
}