Pagini recente » Cod sursa (job #543260) | Cod sursa (job #548384) | Cod sursa (job #264171) | Cod sursa (job #456595) | Cod sursa (job #601115)
Cod sursa(job #601115)
using namespace std;
#include<iostream>
#include<fstream>
#include<cstdlib>
#define nmax 500010
ofstream fout("algsort.out");
int N,a[nmax];
int select(int l,int r)
{
int i,j;
int popiv=rand()%(r-l+1)+l;
int pivot;
pivot=a[popiv];
i=l-1;
j=r+1;
while(1)
{
do
{
i++;
}while(a[i]<pivot);
do
{
j--;
}while(a[j]>pivot);
if(i<j)
{
swap(a[i],a[j]);
}
else return j;
/*for(;a[i]<pivot ;) i++;
for(;a[j]>pivot ;) j--;
swap(a[i],a[j]);*/
}
/*for(i=1;i<=N;i++)
{
cout<<a[i]<<" ";
}
cout<<"\n";*/
//return j;
}
void qsort(int l,int r)
{
//cout<<l<<" "<<r<<"\n";
if(l==r) return;
int p=select(l,r);
qsort(l,p);
qsort(p+1,r);
}
void cit()
{
ifstream fin("algsort.in");
fin>>N;
int i;
for(i=1;i<=N;i++)
{
fin>>a[i];
}
fin.close();
}
int main()
{
srand(time(0));
cit();
qsort(1,N);
int i;
for(i=1;i<=N;i++)
{
fout<<a[i]<<" ";
}
fout.close();
return 0;
}