Pagini recente » Cod sursa (job #2921226) | Cod sursa (job #2973639) | Cod sursa (job #3258000) | Cod sursa (job #3259943) | Cod sursa (job #3000753)
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream in("algsort.in");
ofstream out("aglsort.out");
int v[500001];
int dr[500001];
int st[500001];
int mij[500001];
int n;
int pivot;
void quicksort(int spos=0,int dpos=n-1){
// cout<<spos<<" "<<dpos<<endl;
int m=0;
int s=0;
int d=0;
int p=v[spos];
// cout<<"p="<<p<<endl;
for(int i=spos;i<=dpos;i++){
if(v[i]>p) dr[d++]=v[i];
if(v[i]<p) st[s++]=v[i];
if(v[i]==p) mij[m++]=v[i];
}
int k=0;
for (int i = spos; i <spos+ s; i++)
{
v[i]=st[k++];
// cout<<v[i]<<" ";
}
// cout<<"stanga"<<endl;
k=0;
for (int i = spos+s; i <spos+ s+m; i++)
{
v[i]=mij[k++];
// cout<<v[i]<<" ";
}
// cout<<"mijloc"<<endl;
k=0;
for (int i = spos+s+m; i <spos+ s+d+m; i++)
{
v[i]=dr[k++];
// cout<<v[i]<<" ";
}
// cout<<"dreapta"<<endl;
// cout<<"s="<<s<<endl;
// cout<<"m="<<m<<endl;
// cout<<"d="<<d<<endl;
if(s!=0)
quicksort(0,s);
if(s+m!=s+m+d)
quicksort(s+m,s+d+m-1);
// cout<<endl;
}
int main(){
in>>n;
//citire
for (int i = 0; i < n; i++)
{
in>>v[i];
}
//afisare
quicksort(0,n-1);
for (int i = 0; i < n; i++)
{
out<<v[i]<<" ";
}
// quicksort(4,5);
}