🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #173

Re: potrzebuje posortowac -realia

#173
From: Andrzej Bialecki
Date: Fri, 31 Oct 1997 11:35
94 lines
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!abial
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>

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