Pagini recente » Cod sursa (job #2217749) | Cod sursa (job #3194825) | Cod sursa (job #915814) | Cod sursa (job #1685636) | Cod sursa (job #3211115)
#include <fstream>
#include <vector>
#include <algorithm>
/// STL
std::ifstream fin("algsort.in");
std::ofstream fout("algsort.out");
void MergeSort(std::vector<int>& v) {
if (v.size() > 1) {
size_t rightMost = (v.size() >> 1);
std::vector<int> left(v.begin(), v.begin() + rightMost);
std::vector<int> right(v.begin() + rightMost, v.end ());
MergeSort(left), MergeSort(right);
std::merge(left.begin(), left.end(), right.begin(), right.end(), v.begin());
}
}
/// No STL
const int nMax = 1e6 + 1;
int v[nMax], temporary[nMax];
void Merge(int start1, int end1, int end2) {
int i = start1, j = end1 + 1, Size = 0;
while (i <= end1 && j <= end2) {
if (v[i] < v[j])
Size += 1, temporary[Size] = v[i], i += 1;
else if (v[i] > v[j])
Size += 1, temporary[Size] = v[j], j += 1;
else
Size += 1, temporary[Size] = v[j], i += 1, j += 1;
}
while (i <= end1)
Size += 1, temporary[Size] = v[i], i += 1;
while (j <= end2)
Size += 1, temporary[Size] = v[j], j += 1;
for (int i = 1; i <= Size; i += 1)
v[i + start1 - 1] = temporary[i];
}
void MergeSortNoSTL(int left, int right) {
if (left < right) {
int middle = (left + right) >> 1;
MergeSortNoSTL(left, middle), MergeSortNoSTL(middle + 1, right);
Merge(left, middle, right);
}
}
int main() {
int n; fin >> n;
std::vector<int> v(n);
for (int i = 0; i < n; i += 1)
fin >> v[i];
MergeSort(v);
for (auto elem : v)
fout << elem << ' ';
// int n; std::cin >> n;
// if (n >= nMax) {
// std::cout << "Cam multe numere...";
// return 0;
// }
// for (int i = 1; i <= n; i += 1)
// std::cin >> v[i];
//
// MergeSortNoSTL(1, n);
// for (int i = 1; i <= n; i += 1)
// std::cout << v[i] << ' ';
return 0;
}