Hej allesammen!
Nu da vi ved, at vi ikke skal op i datalogi (Kristian og jeg skal i
hvert fald ikke), s� bliver vores projekt nok lagt lidt p� is...
Det er �rgeligt, at vi ikke skal op i datalogi, i stedet for s�dan
noget som dansk eller historie. Jeg sad faktisk lige og legede lidt
med programmet i morges.
Jeg testede hvor lang tid de to algoritmer var om at sortere lister af
forskellig l�ngde. Det viste sig, at tidsforbruget for Oles algoritme
steg nogenlunde line�rt, mens det sted en anelse eksponentielt for min
algoritme. Jeg brugte den danske ordliste, s� jeg kunne teste helt op
til 350000 elementer.
graf.png
program hovedprogram;
uses
liste,
bobbelsortering,
indsaetningssortering,
traesortering,
pivotsortering,
sammensaetningssortering,
gnutidstagning;
{ indl�ser linjerne i en tekstfil og stopper dem ind i
den k�dede liste}
procedure indlaes_data(var liste : henv;
filnavn : string);
var
fil : text;
s : noegle_type;
begin
assign(fil, filnavn);
reset(fil);
repeat
readln(fil, s);
tilfoej_element(liste, s);
until eof(fil);
close(fil);
end;
procedure udskriv_resultat(metodenavn : string;
tid : integer);
begin
writeln(' ', metodenavn,
' brugte ', tid:4, ' ms');
end;
{ k�rer en test af sorteringsrutinerne givet en liste
(i omvendt orden) }
procedure udfoer_test(dataliste : henv; antal_elementer : integer);
var
bobbelliste, indsaetningliste, sammensaetningliste,
pivotliste, traeliste : henv;
trae : trae_henv;
starttid : integer;
begin
{
bobbelliste := listekopi(dataliste, antal_elementer);
starttid := tiden;
bobbelsortering(bobbelliste);
udskriv_resultat('Boblesortering ',
tiden - starttid);
slet_liste(bobbelliste);
indsaetningliste := listekopi(dataliste, antal_elementer);
starttid := tiden;
indsaetningssortering(indsaetningliste);
udskriv_resultat('Inds�tningssortering ',
tiden - starttid);
slet_liste(indsaetningliste);
}
sammensaetningliste := listekopi(dataliste, antal_elementer);
starttid := tiden;
sammensaetningssortering(sammensaetningliste);
udskriv_resultat('Sammens�tningssortering',
tiden - starttid);
slet_liste(sammensaetningliste);
pivotliste := listekopi(dataliste, antal_elementer);
starttid := tiden;
pivotsortering(pivotliste);
udskriv_resultat('Pivotsortering ',
tiden - starttid);
slet_liste(pivotliste);
{
traeliste := listekopi(dataliste, antal_elementer);
starttid := tiden;
trae := traesortering(traeliste);
udskriv_resultat('Tr�sortering ',
tiden - starttid);
slet_liste(traeliste);
slet_trae(trae);
}
end;
procedure test;
var
l: henv;
begin
l := nil;
indlaes_data(l, 'eksempel.txt');
l := listekopi(l, -1);
sammensaetningssortering(l);
end;
var
dataliste : henv;
i : integer;
begin
i := 0;
writeln;
writeln('Tester en liste hvor 1000% af elementerne er ombyttet.');
indlaes_data(dataliste, '1000-liste.txt');
while i < 350000 do
begin
i := i + 5000;
writeln(i:7, ' elementer:');
udfoer_test(dataliste, i);
end;
slet_liste(dataliste);
{
writeln;
writeln('Tester en liste hvor 100% ',
'af elementerne er ombyttet:');
indlaes_data(dataliste, '100-liste.txt');
udfoer_test(dataliste);
slet_liste(dataliste);
writeln;
writeln('Tester en liste hvor 50% ',
'af elementerne er ombyttet:');
indlaes_data(dataliste, '50-liste.txt');
udfoer_test(dataliste);
slet_liste(dataliste);
writeln;
writeln('Tester en liste hvor 20% ',
'af elementerne er ombyttet:');
indlaes_data(dataliste, '20-liste.txt');
udfoer_test(dataliste);
slet_liste(dataliste);
writeln;
writeln('Tester en liste hvor 5% ',
'af elementerne er ombyttet:');
indlaes_data(dataliste, '5-liste.txt');
udfoer_test(dataliste);
slet_liste(dataliste);
}
end.
unit liste;
interface
type
noegle_type = string[50];
henv = ^element;
element = record { indeholder et listeelement }
naeste : henv;
noegle : noegle_type;
end;
{ inds�tter et nyt element i starten af listen med en given n�gle }
procedure tilfoej_element(var liste: henv; noegle: string);
{ returnerer en kopi (i omvendt r�kkef�lge) af en liste }
function listekopi(liste : henv; antal_elementer : integer): henv;
{ udskriver n�glerne i en liste }
procedure udskriv_liste(liste: henv);
{ sletter alle elementerne i en liste }
procedure slet_liste(var liste: henv);
implementation
procedure tilfoej_element(var liste: henv; noegle: string);
var
element: henv;
begin
new(element);
element^.noegle := noegle;
element^.naeste := liste; { lad elementet henvise til hvad h henviste til}
liste := element; { lad h henvise til elementet }
end;
{ RETMIG: sandsynligvis overfl�dig }
procedure slet_element(var liste: henv; noegle: string);
var
h, forrige: henv;
begin
h := liste;
forrige := nil;
while (h <> nil) and (h^.noegle <> noegle) do
begin
forrige := h;
h := h^.naeste;
end;
if h <> nil then
begin
if forrige = nil then
liste := h^.naeste
else
forrige^.naeste := h^.naeste;
dispose(h);
end;
end;
procedure slet_liste(var liste: henv);
var
h, naeste: henv;
begin
h := liste;
{ l�b igennem alle elementerne }
while h <> nil do
begin
{ husk hvad den n�ste henviser til og slet den nuv�rende }
naeste := h^.naeste;
dispose(h);
h := naeste;
end;
liste := nil; { mark�r at listen er tom }
end;
function listekopi(liste : henv; antal_elementer : integer): henv;
var
h : henv;
n : integer;
begraensning : boolean;
begin
n := 0;
h := liste;
result := nil;
{ hvis antal_elementer er mindre end 0, skal vi ikke lave nogen
begr�nsning }
if antal_elementer < 0 then
begin
antal_elementer := 1;
begraensning := false;
end
else
begraensning := true;
while (h <> nil) and (n < antal_elementer) do
begin
tilfoej_element(result, h^.noegle);
h := h^.naeste;
if begraensning then
inc(n);
end;
end;
procedure udskriv_liste(liste: henv);
var
h: henv;
begin
h := liste;
while h <> nil do
begin
write(h^.noegle, ' '); { udskriv n�gle }
h := h^.naeste;
end;
writeln;
end;
end.
--
Best regards,
Martin Geisler
Checkout http://www.gimpster.com for:
PHP Weather => Shows the current weather on your webpages.
PHP Shell => A telnet-connection (almost :-) in a PHP page.