Pagini recente » Cod sursa (job #1667073) | Cod sursa (job #2362125) | Cod sursa (job #204348) | Cod sursa (job #669348) | Cod sursa (job #799839)
Cod sursa(job #799839)
#include<stdio.h>
#define Nmax 500001
int N,v[Nmax];
void read_data()
{
FILE*f = fopen("algsort.in","r");
fscanf(f,"%d",&N);
for(int i=1;i<=N;++i)
fscanf(f,"%d",&v[i]);
fclose(f);
}
void write_data()
{
FILE*g = fopen("algsort.out","w");
for(int i=1;i<=N;++i)
fprintf(g,"%d ",v[i]);
fclose(g);
}
void swap(int&x,int&y)
{
int aux = x;
x = y;
y = aux;
}
void show()
{
for(int i=1;i<=N;++i)
printf("%d ",v[i]);
printf("\n");
}
int get_piv(int left, int right)
{
int piv = (left+right)/2;
swap(v[piv],v[right]);
piv = right;
--left;
while(true)
{
while(v[++left] < v[piv] && left < right);
while(v[--right] > v[piv] && left < right);
if(left < right)
{
swap(v[left],v[right]);
}
else
break;
}
swap(v[left],v[piv]);
return left;
}
void qsort(int left,int right)
{
if(left>=right)
return;
int piv = get_piv(left,right);
//printf("%d\n",piv);
//show();
qsort(left,piv-1);
qsort(piv+1,right);
}
int main()
{
read_data();
qsort(1,N);
write_data();
return 0;
}