Pagini recente » Autentificare | Cod sursa (job #1131503) | Cod sursa (job #1191340) | Istoria paginii runda/oni_10_2/clasament | Cod sursa (job #1259874)
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
#include <cstring>
using namespace std;
#define nmax 500005
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n;
int V[nmax];
int i, j, num;
string s;
void read()
{
fin >> n;
fin.get();
getline(fin, s);
j = 0;
for (i=0; i<s.size(); i++)
{
if (isspace(s[i]))
V[++j] = num,
num = 0;
else
num = num * 10 + (int(s[i]-48));
}
if (num)
V[++j] = num;
}
void suffle()
{
int j;
srand(time(0));
for (i=1; i<=n; i+=3)
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;
}