Pagini recente » Cod sursa (job #422031) | Cod sursa (job #146597) | Cod sursa (job #569244) | Cod sursa (job #3224778) | Cod sursa (job #2780058)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
int n,v[500001];
void Quicksort (int left, int right)
{
int len=right-left+1;
if (len<=1)return;
if (len==2)
{
if (v[left]>v[right])
swap (v[left],v[right]);
return;
}
int x=rand()%(right-left-1)+left+1;
swap (v[x],v[right]);
int i=left,j=right-1,ki,kj;
while (i<j)
{
ki=i;
kj=j;
while (v[i]<v[right] and i<j)
i++;
while (v[j]>v[right] and i<j)
j--;
swap (v[i],v[j]);
if (i==j)
{
i=ki;
break;
}
}
while (v[i]<=v[right])
i++;
if (i>right)
i=right;
swap (v[i],v[right]);
Quicksort(left,i-1);
Quicksort(i+1,right);
}
int main()
{
srand(time(NULL));
fin >>n;
for (int i=1;i<=n;++i)
fin >>v[i];
Quicksort (1,n);
for (int i=1;i<=n;++i)
fout <<v[i]<<' ';
return 0;
}