Pagini recente » Cod sursa (job #437103) | Cod sursa (job #593662) | Cod sursa (job #2222789) | Cod sursa (job #2838186) | Cod sursa (job #2204193)
#include <vector>
#include <cstdio>
using namespace std;
int partition(vector<int> *v, int left, int right)
{
int pivotPos = left + (1LL * (*v)[left] * 10007 + 1LL * (*v)[right] * 12244777) % (right - left + 1);
swap((*v)[pivotPos], (*v)[right]);
int pivot = (*v)[right];
int i = left - 1;
for (int j = left; j < right; ++j) {
if ((*v)[j] < pivot) {
++i;
swap((*v)[i], (*v)[j]);
}
}
++i;
swap((*v)[i], (*v)[right]);
return i;
}
void quickSort(vector<int> *v, int left, int right)
{
if (left >= right) {
return;
}
int pivotPos = partition(v, left, right);
quickSort(v, left, pivotPos - 1);
quickSort(v, pivotPos + 1, right);
}
int main()
{
freopen("algsort.in", "r", stdin);
int n;
scanf("%d", &n);
vector<int> v(n);
for (int i = 0; i < v.size(); ++i) {
scanf("%d", &v[i]);
}
fclose(stdin);
quickSort(&v, 0, n - 1);
freopen("algsort.out", "w", stdout);
for (int i = 0; i < v.size(); ++i) {
printf("%d ", v[i]);
}
printf("\n");
fclose(stdout);
return 0;
}