Pagini recente » Cod sursa (job #185729) | Cod sursa (job #2887643) | Cod sursa (job #1603555) | Cod sursa (job #2946572) | Cod sursa (job #2785472)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n, arr[500000];
void mergeSort(int a[], int left, int right)
{
if (left == right)
{
return;
}
int mid = (left + right) / 2;
mergeSort(a, left, mid);
mergeSort(a, mid + 1, right);
int pt0 = left;
int pt1 = mid + 1;
int merged[right - left + 1];
int it = 0;
while (it < right - left + 1)
{
if (a[pt0] < a[pt1])
{
merged[it++] = a[pt0];
++pt0;
}
else if (a[pt0] > a[pt1])
{
merged[it++] = a[pt1];
++pt1;
}
else
{
merged[it++] = a[pt0];
merged[it++] = a[pt0];
++pt0;
++pt1;
}
if (pt0 > mid)
{
while (pt1 <= right)
{
merged[it++] = a[pt1++];
}
break;
}
if (pt1 > right)
{
while (pt0 <= mid)
{
merged[it++] = a[pt0++];
}
break;
}
}
for (int i = left; i <= right; ++i)
{
a[i] = merged[i - left];
}
}
int main()
{
fin >> n;
for (int i = 0; i < n; ++i)
{
fin >> arr[i];
}
mergeSort(arr, 0, n - 1);
for (int i = 0; i < n; ++i)
{
fout << arr[i] << " ";
}
fout.flush();
return 0;
}