Pagini recente » Cod sursa (job #347608) | Cod sursa (job #1696710) | Cod sursa (job #1939450) | Cod sursa (job #2191677) | Cod sursa (job #1795251)
#include <iostream>
#include <fstream>
#include <vector>
#include <stdlib.h>
#include <time.h>
using namespace std;
int N;
vector<int> V;
void Read();
void Write();
void RandomQuickSort(int left, int right);
void Swap(int &a, int &b);
int main()
{
Read();
RandomQuickSort(0, N - 1);
Write();
return 0;
}
void RandomQuickSort(int left, int right) {
if(left >= right)
return;
int i = rand() % (right - left + 1) + left;
Swap(V[i], V[right]);
int x = V[right];
i = left - 1;
for(int j = left; j < right; j++)
if(V[j] <= x) {
i++;
Swap(V[i], V[j]);
}
Swap(V[i + 1], V[right]);
int piv = i + 1;
RandomQuickSort(left, piv - 1);
RandomQuickSort(piv + 1, right);
}
void Swap(int &a, int &b) {
int c;
c = a;
a = b;
b = c;
}
void Read() {
freopen("algsort.in", "rt", stdin);
freopen("algsort.out", "wt", stdout);
scanf("%d", &N);
V.assign(N+2, 0);
for(int i = 0; i < N; i++)
scanf("%d", &V[i]);
srand(time(NULL));
}
void Write() {
for(int i = 0; i < N; i++)
cout << V[i] << ' ';
cout << '\n';
}