AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelt verkettete Liste sortieren

Ein Thema von Noobinator · begonnen am 17. Okt 2007 · letzter Beitrag vom 18. Okt 2007
Antwort Antwort
Seite 2 von 2     12   
Noobinator

Registriert seit: 9. Mai 2006
147 Beiträge
 
Delphi 7 Personal
 
#11

Re: Doppelt verkettete Liste sortieren

  Alt 17. Okt 2007, 21:14
Zitat von quendolineDD:
Irgendwo gab es mal einen Thread, wo sehr gut beschriebn wird, wie gefährlich das ist, so auf boolsche Ausdrücke hin zu überprüfen. Habe den aber eben nicht gefunden :-\

An sich scheint es das gleiche zu sein, aber deine Abfrage kann auch mal dicke in die Hose gehen
Zitat:
Nein man vergleicht einen Booleanwert nie auf True oder False!
also ich Hatte noch nie Probleme damit o.O

wenn ich hingegen

while leer(mylist) do schriebe kann jeder compiler das anderst interpretieren.

Wer sagt mir denn das es in 10 Jahren nicht ein Compiler gibt, der diesen Ausdruck standardmäßig auf false Prüft, und nicht wie Delphi auf true?

und eigentlich wollte ich meine Proggs in 10 Jahren auch noch benutzen..

daher einfach true oder false dahinter o.O

aber such mal bitte den Artikel.. bin auch auf der Suche... das Interessiert mich jetzt.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Doppelt verkettete Liste sortieren

  Alt 17. Okt 2007, 21:17
Gesucht und gefunden
hier kannst du ihn begutachten

Grüße
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Doppelt verkettete Liste sortieren

  Alt 17. Okt 2007, 21:21
Zitat:
Wer sagt mir denn das es in 10 Jahren nicht ein Compiler gibt, der diesen Ausdruck standardmäßig auf false Prüft, und nicht wie Delphi auf true?
Sehr witzig: was wird dieser Compiler denn dann aus if a=b machen?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Doppelt verkettete Liste sortieren

  Alt 17. Okt 2007, 21:25
Falscher Thread
Markus Kinzler
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#15

Re: Doppelt verkettete Liste sortieren

  Alt 17. Okt 2007, 21:36
Zitat von Noobinator:
Wer sagt mir denn das es in 10 Jahren nicht ein Compiler gibt, der diesen Ausdruck standardmäßig auf false Prüft, und nicht wie Delphi auf true?
Was sagt dir, dass in 10 jahren Delphi "=" imemr noch als Gleicheitszeichen interpretiert und nciht als ungleich

Die Sache ist einfach die, das Boolean intern ein Byte groß ist. Wenn dieses Byte den Wert 0 hat, bedeutet das "Aus". Jeder Wert <> 0 bedeutet "An".
Das Problem ist, dass die Konstanten True und False als 0 und 1 festgelegt sind. Wenn du also "=True" schreibst, wird also nicht auf Wahrheit überprüft, sondern auf die Zahl 1. Da kann es passieren, dass eine Prüfung false ergibt, obwohl sie wahr gewesen wäre: In VB bedeutet True beispielsweise nicht 1, sondern -1. Wenn du nun den Rückgabewert aus einer VB-Dll prüfst, wird deine Schreibweise imemr False ergeben!
Theoretisch könnte man zumindest "variable = false" schreiben statt "not variable", aber erstens ist letzteres kürzer und zweitens ist es konsequenter.

Ein kleines Konsolenprogramm zum Beweisen:
Delphi-Quellcode:
var
  b: boolean;
  s: string; // Für Readln
begin
  b := true;
  writeln('Test 1: b='+inttostr(ord(b)));
  if b then
    writeln(' a) Wahr')
  else
    writeln(' a) Falsch');
  if b=True then
    writeln(' b) Wahr')
  else
    writeln(' b) Falsch');

  b := boolean(byte(-1));
  writeln('Test 2: b='+inttostr(ord(b)));
  if b then
    writeln(' a) Wahr')
  else
    writeln(' a) Falsch');
  if b=True then
    writeln(' b) Wahr')
  else
    writeln(' b) Falsch');
  readln(s); // Damit sich das Prrogramm nicht sofort beendet
end.
Ich hoffe, ich habe es einigermaßen verständlich rüberbringen können (Habs manchmal nicht so mit dem Erklären^^)

//Edit: kein roter Kasten... naja schadet ja nicht
//Edit²: @quendolineDD: Uppsi, sorry ._. Ich weiß wirklich nicht, wie das passiert ist^^ Hab's geändert.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Doppelt verkettete Liste sortieren

  Alt 17. Okt 2007, 21:38
Hey du hast falsch zitiert, das habe ich nie gesagt :-\
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Doppelt verkettete Liste sortieren

  Alt 18. Okt 2007, 02:42
Hallo, für verkettete Listen eignet sich Mergesort sehr gut. Laufzeit im worst case ist O(n*log(n)), also sehr nahe am theoretischen Minimum. Lineare Laufzeit, also O(n), wird schwer, da dein Wertebereich wahrscheinlich zu groß für Bucketsort ist.

Mergesort ist zwar ein rekursiver Algorithmus, allerdings garantiert er dir eine Rekursionstiefe von log(n). Wenn du also 1267650600228229401496703205376 Werte sortierst, hast du trotzdem nur eine Rekursionstiefe von ~100.
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Noobinator

Registriert seit: 9. Mai 2006
147 Beiträge
 
Delphi 7 Personal
 
#18

Re: Doppelt verkettete Liste sortieren

  Alt 18. Okt 2007, 09:29
Zitat von Dani:
Hallo, für verkettete Listen eignet sich Mergesort sehr gut. Laufzeit im worst case ist O(n*log(n)), also sehr nahe am theoretischen Minimum. Lineare Laufzeit, also O(n), wird schwer, da dein Wertebereich wahrscheinlich zu groß für Bucketsort ist.

Mergesort ist zwar ein rekursiver Algorithmus, allerdings garantiert er dir eine Rekursionstiefe von log(n). Wenn du also 1267650600228229401496703205376 Werte sortierst, hast du trotzdem nur eine Rekursionstiefe von ~100.
Ok danke dir erstmal =)
Werde ich mir mal zu Gemüte führen.

OT: endlich back @ Topic^^
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz