Pagini recente » Cod sursa (job #3273541) | Cod sursa (job #452847) | Profil NegreaVlad00 | Cod sursa (job #2519205) | Cod sursa (job #1894606)
#include <vector>
#include <fstream>
template<typename T>
void merge(std::vector<T> &vec,int left,int right)
{
std::vector<T> temp;
int mid = left + (right-left) / 2;
int i = left, j = mid+1;
while (i <= mid && j <= right)
temp.push_back(vec[i] < vec[j] ? vec[i++] : vec[j++]);
while (i <= mid)
temp.push_back(vec[i++]);
while (j <= right)
temp.push_back(vec[j++]);
for (size_t i = 0; i < temp.size(); i++)
vec[left + i] = temp[i];
}
template<typename T>
void merge_sort(std::vector<T> &vec, int left, int right) {
if (left >= right) return;
int mid = left + (right - left) / 2;
merge_sort(vec, left, mid);
merge_sort(vec, mid+1, right);
merge(vec,left,right);
}
template<typename T>
void MergeSort(std::vector<T> &vec) {
merge_sort(vec, 0, vec.size()-1);
}
int main(void) {
std::ifstream in("algsort.in");
int n;
in >> n;
std::vector<int> v(n);
for (int i = 0; i < n; i++)
in >> v[i];
in.close();
MergeSort(v);
std::ofstream out("algsort.out");
for (auto e : v)
out << e << " ";
out.close();
return 0;
}