Pagini recente » Cod sursa (job #556890) | Cod sursa (job #1781671) | Istoria paginii runda/listare_agm | Cod sursa (job #3178055) | Cod sursa (job #1229404)
#include <stdio.h>
#define MAX 500010
#define FIN "algsort.in"
#define FOUT "algsort.out"
int vec[ MAX ],
n;
void read();
void sort();
void qs(int,int);
int partition(int,int);
void write();
int main() {
read();
sort();
write();
return 0;
}
void read() {
int i;
freopen(FIN, "r", stdin);
scanf("%d", &n);
for(i = 0; i < n; i++) {
scanf("%d", &vec[ i ]);
}
fclose( stdin );
};
void sort() {
qs(0, n - 1);
};
void qs(int li, int ls) {
int pos;
if(li < ls) {
pos = partition(li, ls);
qs(li, pos - 1);
qs(pos + 1, ls);
}
};
int partition(int li, int ls) {
int i,
j,
i1,
j1,
xor;
i = li; j = ls; i1 = 0; j1 = -1;
while(i < j) {
if(vec[i] > vec[j]) {
xor = vec[i]^vec[j];
vec[i] = xor^vec[i];
vec[j] = xor^vec[j];
xor = i1;
i1 = -j1;
j1 = -xor;
}
i = i + i1;
j = j + j1;
}
return i;
}
void write() {
int i;
freopen(FOUT, "w", stdout);
for(i = 0; i < n; i++) {
printf("%d ", vec[ i ]);
}
fclose(stdout);
};