Pagini recente » Cod sursa (job #3177285) | Cod sursa (job #629692) | Cod sursa (job #1203198) | Cod sursa (job #981423) | Cod sursa (job #3260750)
#include <bits/stdc++.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
const int N = 500002;
int n,a[N];
void quickSort(int,int);
inline int randomNumber(int lo,int hi)
{
std::uniform_int_distribution<int> rng_range(lo,hi);
std::random_device rd;
std::mt19937 rng_mt( rd() );
int random_number = rng_range( rng_mt );
return random_number;
}
int main()
{
srand(time(0));
f>>n;
for(int i=1;i<=n;i++)
f>>a[i];
quickSort(1,n);
for(int i=1;i<=n;i++)
g<<a[i]<<' ';
g<<'\n';
return 0;
}
void quickSort(int lo,int hi)
{
if(lo>=hi)
return;
/// se alege valoare pivot
/// acesta se ia intr-o pozitie rnadom intre st si dr
/// val minima - maxima dr-st
int mi=randomNumber(lo,hi);
int piv=a[mi];
int st=lo,dr=hi;
/// intervalul [lo,dr] sa contina valori <=piv
/// intervalul [st,hi] sa contina valori >=piv
do
{
while(a[st]<piv)st++;/// < sau <= ???
while(a[dr]>piv)dr--;/// > sau >= ???
if(st<=dr)
{
swap(a[st],a[dr]);
st++;dr--;
}
}
while(st<=dr);
quickSort(lo,dr);
quickSort(st,hi);
}