Article View: pl.comp.lang.c
Article #173Re: potrzebuje posortowac -realia
From: Andrzej Bialecki
Date: Fri, 31 Oct 1997 11:35
Date: Fri, 31 Oct 1997 11:35
94 lines
3431 bytes
3431 bytes
On 30 Oct 1997, Grzegorz Grudzinski wrote:
> abial@korin.warman.org.pl (Andrzej Bialecki) writes:
>
> > ??? No, niezupelnie calkowicie.... Na dowolnym systemie operacyjnym
> Nie, pachnie raczej znajomoscia analizy algorytnow, a nie mysleniem
> zyczeniowym i brakiem zrozumienia zastosowan pamieci wirtualnej.
Z ciekawosci jednak sprobowalem (napisanym na kolanie programem o dlugosci
kilkudziesieciu linii - bo tez musialem sobie stworzyc odpowiednie dane).
Programik posortowal mi plik 100MB w 5 minut (na Pentium 133/FreeBSD),
uzywajac metody qsort(). Oczywiscie swapowal co nie miara (dlatego tez tak
dlugo to trwalo), ale na systemie dalo sie sensownie pracowac.
Mysle, ze jak na poczatek, nie byl to taki zly czas :-) a cel zostal
osiagniety.
Natomiast rzeczywiscie, gdybym mial to robic kilka razy na dzien, to
pobawilbym sie we wlasne algorytmy.
Andrzej Bialecki
PS. Jakby ktos chcial sprobowac, to zalaczam programik.
---------------------+---------------------------------------------------------
abial@warman.org.pl | if(halt_per_mth > 0) { fetch("http://www.freebsd.org") }
Research & Academic | "Be open-minded, but don't let your brains to fall out."
Network in Poland | All of the above (and more) is just my personal opinion.
---------------------+---------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
#define DATASIZE 200
#define ELCOUNT 500000
struct proba {
char data[DATASIZE];
};
int
proba_cmp(struct proba *first, struct proba *second)
{
return(strncmp(first->data,second->data,DATASIZE));
}
int
main(int argc, char *argv[])
{
int i,j,k;
int fd;
char c;
struct proba p;
struct proba *beast;
fd=open("proba.dat",O_RDWR|O_CREAT|O_TRUNC,0600);
if(fd==0) {
perror("open");
exit(1);
}
printf("Writing file...\n");
c=' ';
for (i=0;i<ELCOUNT;i++) {
for(j=0;j<DATASIZE;j++) {
p.data[j]=c++;
if(c>'}') c=' ';
}
write(fd,&p,sizeof(struct proba));
}
beast=malloc(ELCOUNT*sizeof(struct proba));
lseek(fd,(off_t)0,SEEK_SET);
printf("Reading it back...\n");
for(i=0;i<ELCOUNT;i++) {
read(fd,(beast+i),sizeof(struct proba));
}
close(fd);
printf("Sorting it...\n");
qsort(beast,ELCOUNT,sizeof(struct proba),proba_cmp);
printf("Writing output...\n");
fd=open("proba.out",O_RDWR|O_CREAT|O_TRUNC,0600);
c='\n';
for(i=0;i<ELCOUNT;i++) {
write(fd,(beast+i),sizeof(struct proba));
write(fd,&c,sizeof(char));
}
close(fd);
free(beast);
exit(0);
}
Technical Details
Message-ID:
<63cfqj$n02@info.nask.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!uw.edu.pl!news.icm.edu.pl!news.nask.pl!korin.warman.org.pl!abialReferences:
<Pine.GSO.3.96.971029151748.27850B-100000@geolog.geol.agh.edu.pl> <3457CBFD.678F@celebris.bdk.lublin.pl> <637j0c$3du@info.nask.pl> <63ac67$hri@info.nask.pl> <63ade3$mcc@info.nask.pl> <63ak1c$ejd@info.nask.pl> <oq3elj2c89.fsf@lipa.mimuw.edu.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!uw.edu.pl!news.icm.edu.pl!news.nask.pl!korin.warman.org.pl!abial From: abial@korin.warman.org.pl (Andrzej Bialecki) Newsgroups: pl.comp.lang.c Subject: Re: potrzebuje posortowac -realia Date: 31 Oct 1997 11:35:47 GMT Organization: Public NewsServer at NASK N.O.C. Lines: 94 Message-ID: <63cfqj$n02@info.nask.pl> References: <Pine.GSO.3.96.971029151748.27850B-100000@geolog.geol.agh.edu.pl> <3457CBFD.678F@celebris.bdk.lublin.pl> <637j0c$3du@info.nask.pl> <63ac67$hri@info.nask.pl> <63ade3$mcc@info.nask.pl> <63ak1c$ejd@info.nask.pl> <oq3elj2c89.fsf@lipa.mimuw.edu.pl> NNTP-Posting-Host: korin.nask.waw.pl X-Newsreader: TIN [version 1.2 PL2] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit