Pagini recente » Cod sursa (job #2732654) | Cod sursa (job #1425168) | Cod sursa (job #802173) | Cod sursa (job #2729245) | Cod sursa (job #456382)
Cod sursa(job #456382)
#include <cstdio>
inline void swap(unsigned a[], int x, int y){
static unsigned aux;
aux = a[x];
a[x] = a[y];
a[y] = aux;
}
void qsort(unsigned a[], int left, int right){
int i, last, equal;
if(left >= right)
return;
swap(a, right, (left+right)/2);
last = left; equal = right; i = left;
while(i < equal){
/*for(int j = left; j <= right; j++)
printf("%u ", a[j]);
printf("\n");*/
if(a[i] < a[equal])
swap(a, last++, i++);
else if(a[i] == a[equal])
swap(a, i, --equal);
else
i++;
}
int aux = last;
for(i = equal; i <= right; i++)
swap(a, last++, i);
//printf("\n");
//swap(a, left, last);
qsort(a, left, aux-1);
qsort(a, last, right);
}
int main(){
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int i, n;
unsigned a[500000];
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%u", a+i);
qsort(a, 0, n-1);
for(i = 0; i < n; i++)
printf("%u ", a[i]);
printf("\n");
}