Pagini recente » Cod sursa (job #900403) | Cod sursa (job #2268811) | Cod sursa (job #2670481) | Cod sursa (job #764095) | Cod sursa (job #1287819)
#include <stdio.h>
#include <malloc.h>
#define FIN "algsort.in"
#define FOUT "algsort.out"
typedef unsigned int uint;
uint* read() {
uint i,
n,
*vec;
FILE *fin = fopen(FIN, "r");
fscanf(fin, "%d", &n);
vec = (uint*) malloc(n * sizeof(uint));
for(i = 1; i <= n; i++) fscanf(fin, "%d", &vec[i]);
vec[ 0 ] = n;
fclose( fin );
return vec;
};
void _qsort(uint *p, int li, int ls) {
int i = li,
j = ls,
piv = p[ ( li + ls ) >> 1 ],
aux;
while( i <= j ) {
while( p[ i ] < piv ) i++;
while( p[ j ] > piv ) j--;
if( i <= j ) aux = p[ i ] ^ p[ j ], p[ i ] = aux ^ p[ i ], p[ j ] = aux ^ p[ j ], i++, j--;
}
if( li < j ) _qsort(p, li, j);
if( i < ls) _qsort(p, i, ls);
};
void sort(uint *p) {
_qsort(p, 1, p[ 0 ] - 1);
};
void write(uint *p) {
uint i;
FILE *fout = fopen(FOUT, "w");
for(i = 1; i <= p[ 0 ]; ++i) fprintf(fout, "%d ", p[ i ]);
fclose( fout );
};
int main() {
uint* p;
p = read();
sort( p );
write( p );
return(0);
};