Pagini recente » Cod sursa (job #1058260) | Cod sursa (job #773986) | Cod sursa (job #2970930) | Cod sursa (job #130700) | Cod sursa (job #738625)
Cod sursa(job #738625)
#include<cstdio>
#include<algorithm>
#define lmax 500050
#define ISCONSTANT 15
#define in "r"
#define out "w"
using namespace std;
FILE *f=fopen("algsort.in",in),*g=fopen("algsort.out",out);
int n,i,a[lmax];
int partitie(int ,int );
void schimbint(int &a,int &b)
{
int aux;
aux=a;
a=b;
b=aux;
}
void insertion_sort(int s,int d)
{
int key,i,j;
for(j=s; j<=d; j++)
{
key=a[j];
i=j-1;
while(a[i]>key && i>=0)
a[i+1]=a[i],i--;
a[i+1]=key;
}
}
int partitie(int s,int d)
{
schimbint(a[s],a[s+rand()%(d-s)]);
int pivot=a[s],i,j;
i=s;
for(j=s+1; j<=d; j++)
if(a[j]<=pivot)
{
i++;
schimbint(a[i],a[j]);
}
schimbint(a[s],a[i]);
return i;
}
void qs(int s,int d)
{
int m;
if(s<d && d-s>ISCONSTANT)
{
m=partitie(s,d);
qs(s,m-1);
qs(m+1,d);
}
else if(s<d)
insertion_sort(s,d);
}
void show_vector()
{
int i;
for(i=1; i<=n; i++)
fprintf(g,"%d ",a[i]);
}
void read()
{
int i;
fscanf (f,"%d",&n);
for(i=1; i<=n; i++)
fscanf(f,"%d",&a[i]);
}
int main()
{
read();
qs(1,n);
show_vector();
fclose(f);
fclose(g);
return 0;
}