Pagini recente » Cod sursa (job #2066108) | Cod sursa (job #3270499) | Cod sursa (job #2040190) | Cod sursa (job #144970) | Cod sursa (job #1347262)
/*
qsort - O(n log n) , worst case n*n
qsort ( st, dr) {
if st == dr
return
alegi pivot random din interval
elem din stanga vor fi < pivot
elem din dreapta > pivot
apel pt (st, "mij") si ("mij" + 1 , dr)
*/
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n, v[500005];
void qsort (int st, int dr)
{
if (st >= dr)
return;
int i, j, pivot = st + rand() % (dr - st + 1);
pivot = v[pivot];
i = st;
j = dr;
while ( i <= j ) {
while ( i <= dr && v[i] < pivot)
i++;
while ( j >= st && v[j] > pivot)
j--;
if (i <= j) {
int aux = v[i];
v[i] = v[j];
v[j] = aux;
i++;
j--;
}
}
qsort (st,j);
qsort (i,dr);
}
int main()
{
int i;
srand(time(NULL));
fin>>n;
for (i = 0; i < n; i++)
fin>>v[i];
fin.close();
qsort(0,n-1);
for (i = 0; i < n; i++)
fout<<v[i]<<" ";
fout<<'\n';
fout.close();
return 0;
}