Pagini recente » Cod sursa (job #732040) | Monitorul de evaluare | Monitorul de evaluare | Statistici Stoicescu Dumitru (stomitu) | Cod sursa (job #2785655)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n, arr[500000];
void quickSort(int a[], int left, int right)
{
if (left >= right)
{
return;
}
int p = a[(left + right) / 2];
int cntEqual = 0;
int cntLess = 0;
int cntGreater = 0;
int less[right - left + 1];
int greater[right - left + 1];
for (int i = left; i <= right; ++i)
{
if (a[i] < p)
{
less[cntLess++] = a[i];
}
else if (a[i] > p)
{
greater[cntGreater++] = a[i];
}
else
{
++cntEqual;
}
}
for (int i = left; i <= right; ++i)
{
if (i - left < cntLess)
{
a[i] = less[i - left];
}
else if (i > right - cntGreater)
{
a[i] = greater[right - i];
}
else
{
a[i] = p;
}
}
quickSort(a, left, left + cntLess - 1);
quickSort(a, right - cntGreater + 1, right);
}
int main()
{
fin >> n;
for (int i = 0; i < n; ++i)
{
fin >> arr[i];
}
quickSort(arr, 0, n - 1);
for (int i = 0; i < n; ++i)
{
fout << arr[i] << " ";
}
fout.flush();
return 0;
}