Pagini recente » infoarena - comunitate informatica, concursuri de programare | Istoria paginii implica-te/extinde-arhiva/acord | infoarena 2 | infoarena - comunitate informatica, concursuri de programare | Cod sursa (job #2176918)
#include <fstream>
#include <iostream>
using namespace std;
const int N=500005;
int v[N],n;
void citeste()
{
int i;
ifstream fin("algsort.in");
fin>>n;
for(i=1; i<=n; i++)
fin>>v[i];
}
void scrie()
{
int i;
ofstream fout("algsort.out");
for(i=1; i<=n; i++)
fout<<v[i]<<' ';
fout<<'\n';
}
int poz(int i, int j)
{
int x=v[i],s[N],d[N],k=0,l=0,q=i;
for(int poz=i+1; poz<=j; poz++)
{
if(v[poz]<=v[i])
s[++k]=v[poz];
else
d[++l]=v[poz];
}
for(int poz=1; poz<=k; poz++)
v[q++]=s[poz];
v[q++]=x;
for(int poz=1; poz<=l; poz++)
v[q++]=d[poz];
return i+k;
}
void sortare(int i, int j)
{
if(i<=j)
{
int k=poz(i,j);
sortare(i,k-1);
sortare(k+1,j);
}
}
int main()
{
citeste();
sortare(1,n);
scrie();
return 0;
}