Pagini recente » Cod sursa (job #1235204) | Cod sursa (job #2557237) | Cod sursa (job #301635) | Cod sursa (job #2102286) | Cod sursa (job #336664)
Cod sursa(job #336664)
#include <fstream>
#include <cstdlib>
#include <algorithm>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int Partitie(int A[], int st, int dr)
{
int poz = st + (rand() % (dr - st + 1));
int tmp = A[poz];
A[poz] = A[st];
A[st] = tmp;
int V = A[st];
do
{
do
--dr;
while ( st < dr && A[dr] > V );
do
++st;
while ( st < dr && A[st] < V );
if ( st < dr )
{
int tmp = A[st];
A[st] = A[dr];
A[dr] = tmp;
}
} while ( st < dr );
return dr;
}
void Quicksort(int A[], int st, int dr)
{
while ( st < dr )
{
int P = Partitie(A, st, dr);
if ( P - st < dr - P - 1 )
{
Quicksort(A, st, P);
st = P + 1;
}
else
{
Quicksort(A, P + 1, dr);
dr = P;
}
}
}
int A[500020];
int main()
{
int n;
srand((unsigned)time(0));
in >> n;
for ( int i = 1; i <= n; ++i )
in >> A[i];
Quicksort(A, 1, n);
for ( int i = 1; i <= n; ++i )
out << A[i] << " ";
return 0;
}