Pagini recente » Cod sursa (job #2387735) | Cod sursa (job #2578809) | Cod sursa (job #86803) | Cod sursa (job #2914311) | Cod sursa (job #1795163)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
void merge_sort(int arr[], int left, int right)
{
int middle = (left + right) / 2;
// Splitting
if (left < middle)
merge_sort(arr, left, middle);
if (middle+1 < right)
merge_sort(arr, middle+1, right);
// Merging
queue<int> left_part;
queue<int> right_part;
for (int i = left; i <= middle; ++i)
left_part.push(arr[i]);
for (int i = middle+1; i <= right; ++i)
right_part.push(arr[i]);
int k = left;
while (!left_part.empty() && !right_part.empty())
{
if (left_part.front() < right_part.front())
{
arr[k] = left_part.front();
left_part.pop();
}
else
{
arr[k] = right_part.front();
right_part.pop();
}
++k;
}
while (!left_part.empty())
{
arr[k] = left_part.front();
left_part.pop();
++k;
}
while (!right_part.empty())
{
arr[k] = right_part.front();
right_part.pop();
++k;
}
}
int main()
{
ifstream cin("algsort.in");
ofstream cout("algsort.out");
int n;
cin >> n;
int a[n];
for (int i = 0; i < n; ++i)
cin >> a[i];
merge_sort(a, 0, n-1);
for (int i = 0; i < n; ++i)
cout << a[i] << ' ';
cout << '\n';
return 0;
}