Pagini recente » Cod sursa (job #537840) | Cod sursa (job #2589743) | Istoria paginii runda/pregatireoji-lensumin120pct/clasament | Cod sursa (job #141556) | Cod sursa (job #1259853)
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
#define nmax 500005
ifstream fin("algsort.in");
ofstream fout("sort.out");
int n;
int V[nmax];
int i;
void read()
{
fin >> n;
for (i=1; i<=n; i++)
fin >> V[i];
}
void suffle()
{
int j;
srand(time(0));
for (i=1; i<=n; i++)
{
j = (rand()%n) + 1;
swap(V[i], V[j]);
}
}
void qs(int st, int dr)
{
int i, j;
bool dir;
if (st < dr)
{
i = st;
j = dr;
dir = true;
while (i != j)
{
if (dir)
{
if (V[i] <= V[j])
i++;
else
swap(V[i], V[j]),
dir = false,
j--;
}
else
{
if (V[i] <= V[j])
j--;
else
swap(V[i], V[j]),
dir = true,
i++;
}
}
qs(st, i-1);
qs(i+1, dr);
}
}
void write()
{
for (i=1; i<=n; i++)
fout << V[i] << " ";
fout << "\n";
}
int main()
{
read();
suffle();
qs(1, n);
write();
fin.close();
fout.close();
return 0;
}