Pagini recente » Monitorul de evaluare | Cod sursa (job #463744) | Cod sursa (job #477866) | Cod sursa (job #810840) | Cod sursa (job #2081489)
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
#include <string.h>
#define NMax (int)5e5 + 5
int N;
int v[NMax];
int comp(const void*,const void*);
void psort(void*,int,int,int(*comp)(void*,void*));
void swap(void*,void*);
int main()
{
FILE *f = fopen("algsort.in","r");
FILE *g = fopen("algsort.out","w");
fscanf(f,"%d",&N);
int i;
for (i=1;i <= N;++i) {
fscanf(f,"%d",v+i);
}
/*
int a = 30, b = 2;
swap(&a,&b);
printf("a = %d\nb = %d",a,b);
//*/
psort(v+1,N,4,comp);
for (i=1;i <= N;++i) {
fprintf(g,"%d ",v[i]);
}
fclose(f);fclose(g);
return 0;
}
void psort(void* v,int N,int sz,int(*comp)(void*,void*)) {
int i,j;
for (i=0;i < N;++i) {
for (j=i+1;j < N;++j) {
void *a = v + i*sz;
void *d = v + j*sz;
if (comp(a,d) > 0) {
swap(a,d);
}
}
}
}
int comp(const void *a,const void *b) {
int x = *((int*)a);
int y = *((int*)b);
if (x < y) {
return -1;
}
if (x > y) {
return 1;
}
return 0;
}
void swap(void* a,void* b) {
int *x = (int*)a;
int *y = (int*)b;
*x ^= *y ^= *x ^= *y;
}