Pagini recente » Cod sursa (job #1805893) | Cod sursa (job #1548376) | Cod sursa (job #2063944) | Cod sursa (job #949954) | Cod sursa (job #2277156)
#include <iostream>
#include <fstream>
#include <random>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
const int N = 500001;
int n, v[N];
int partitie (int v[], int st, int dr) {
int ra=st+rand()%(dr-st+1);
int rb=st+rand()%(dr-st+1);
int rc=st+rand()%(dr-st+1);
if(v[ra]>v[rb])
{
swap(ra,rb);
}
if(v[ra]>v[rc])
{
swap(ra,rc);
}
if(v[rb]>v[rc])
{
swap(rb,rc);
}
int poz=rb;
swap(v[dr],v[poz]);
int pivot = v[dr];
int i=st-1;
int j=dr+1;
while(1)
{
do
{
i++;
}
while(v[i]<pivot);
do
{
j--;
}
while(v[j]>pivot);
if(i>=j)
{
return j;
}
swap(v[i],v[j]);
}
}
void quicksort (int v[], int st, int dr) {
if(st < dr) {
int part = partitie (v, st, dr);
quicksort (v, st, part);
quicksort (v, part + 1, dr);
}
}
void afisare (int v[]) {
for(int i = 1; i <= n; i ++)
g << v[i] << ' ';
}
int main()
{
f >> n;
for(int i = 1; i <= n; i ++)
f >> v[i];
quicksort (v, 1, n);
afisare (v);
return 0;
}