AGB  ·  Datenschutz  ·  Impressum  







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

4 dimensionalen Array sortieren

Ein Thema von Coder · begonnen am 20. Jun 2006 · letzter Beitrag vom 23. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Coder
Coder

Registriert seit: 27. Feb 2004
Ort: Bochum
203 Beiträge
 
Delphi 3 Professional
 
#1

4 dimensionalen Array sortieren

  Alt 20. Jun 2006, 12:55
ich habe Delphi 3

und möchte gerne einen 4 dimensionalen Array sortieren.
Also z.B. folgende Tabelle:

Delphi-Quellcode:
_______Name____Datum_______Size_____Std
1 Jens 23.07.72 187 1
2 Marc 04.01.75 175 1
3 Tina 12.02.74 167 2
4 Jan 27.06.71 195 1
5 Elke 08.12.72 170 2
Später sollen mal Arrays mit tausenden von Feldern sortiert werden.

ich habe jetzt schon versucht den Quicksort Algo einzubauen.
http://de.wikipedia.org/wiki/Quicksort#Delphi.2FPascal

hatte aber bisher noch keinen Erfolg damit [k.a. woran's liegt]
Liegt wohl an delphi 3 und fehlenden Functions...

hat jemand, eine Idee, wie man realisieren kann, daß wenn ich nach Geburtsdatum sortiere, die Namen und andern Daten weiterhin zuordbar bleiben?
also "Jan, 27.06.71 195 1" ganz oben, wenn ich aufsteigend nach Datum sortiere.
(bei Std. ist das egal, nur die anderen 3 muß ich sortieren können)
Und das soll später bei 1000 Datensätzen sehr schnell gehen.

Kennt Ihr eine Lösung?
ICQ: 204141443
Delphi 3 Professional, Intel 2x 2,4Ghz, 3 GB-Graka, Sound-onBrd, --
außerdem D2S, D3Pro, D4S, D5S, D6S, D7S + Indy, Lazarus, VB5Std, VC++5Pro, Tasm4+5 - was braucht man mehr?
-
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#2

Re: 4 dimensionalen Array sortieren

  Alt 20. Jun 2006, 13:00
Wenn ich dich richtig verstanden hab, dann brauchst du n stabilen Sortieralgorithmus. QuickSort ist instabil, hilft dir also wenig. Guck dich mal um; Auswahl gibts genug: www.sortieralgorithmen.de

mfg

Christian

P.S.: Du meinst nicht wirklich 4-Dimensional, oder?
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#3

Re: 4 dimensionalen Array sortieren

  Alt 20. Jun 2006, 13:01
Erstelle dir einen Record, der die vier (oder mehr) Attribute aufnehmen kann und erstelle dir dann einen Array dieses Record-Typen.
Diesen Array kannst du dann normal sortieren lassen.

P.S.
Du hast vier Werte keinen 4-dimenionalen Array.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#4

Re: 4 dimensionalen Array sortieren

  Alt 20. Jun 2006, 13:08
Exakt, und schups wird QuickSort auch stabil. Hauptsache ALLE 4 Spalten werden in die Sortierung mit einbezogen.

Gruß Hagen
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#5

Re: 4 dimensionalen Array sortieren

  Alt 20. Jun 2006, 13:49
Hi,

der Ansatz ein "Array of Record" zu verwenden ist schon relativ gut, allerdings sollte man vermeiden alle Elemente des Arrays zu vertauschen. Beim Vertauschen müßte man theoretisch 3 mal "umkopieren" (und das für jedes Element in der Daten-Struktur) sofern man sich an "Bubblesort" orientiert. Solche Kopiervorgänge sind absolut unnötig und kosten nur unnötig Zeit. Auch soetwas mit anderen Sortieralgorithmen zu machen, ist Schwachsinn.

Wie verhindert man nun, das unnötige umkopieren?
Indem man Zeiger (Pointer) benutzt. Zeiger sind grob gesagt "Speicheradressen".
Man merkt sich also den Speicherort jedes Elements im Array und sortiert dann nur noch die Adressreihenfolge.

PS: Kein Kommentar zu weiteren^^...
  Mit Zitat antworten Zitat
Benutzerbild von Coder
Coder

Registriert seit: 27. Feb 2004
Ort: Bochum
203 Beiträge
 
Delphi 3 Professional
 
#6

Re: 4 dimensionalen Array sortieren

  Alt 20. Jun 2006, 13:56
ja, gut, danke..
über das hin und her Kopieren in einen neuen Array habe ich mir auch schon Gedanken gemacht.
UNd verworfen, da wie gesagt Rechenzeit verloren geht.

Allerdings, wie kann ich das mit Pointern umsetzen?

also ich bin leider kein Delphi-Freak.
Ich kann nur rudimentäre Sachen programmieren.
Mit Pointern und Records kenn ich mich gar nicht aus.

Gibt es einen einfach Weg?
ICQ: 204141443
Delphi 3 Professional, Intel 2x 2,4Ghz, 3 GB-Graka, Sound-onBrd, --
außerdem D2S, D3Pro, D4S, D5S, D6S, D7S + Indy, Lazarus, VB5Std, VC++5Pro, Tasm4+5 - was braucht man mehr?
-
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#7

Re: 4 dimensionalen Array sortieren

  Alt 20. Jun 2006, 14:29
Zitat von bigg:
Hi,

der Ansatz ein "Array of Record" zu verwenden ist schon relativ gut, allerdings sollte man vermeiden alle Elemente des Arrays zu vertauschen. Beim Vertauschen müßte man theoretisch 3 mal "umkopieren" (und das für jedes Element in der Daten-Struktur) sofern man sich an "Bubblesort" orientiert. Solche Kopiervorgänge sind absolut unnötig und kosten nur unnötig Zeit. Auch soetwas mit anderen Sortieralgorithmen zu machen, ist Schwachsinn.

Wie verhindert man nun, das unnötige umkopieren?
Indem man Zeiger (Pointer) benutzt. Zeiger sind grob gesagt "Speicheradressen".
Man merkt sich also den Speicherort jedes Elements im Array und sortiert dann nur noch die Adressreihenfolge.

PS: Kein Kommentar zu weiteren^^...
Denkst du wirklich, es macht einen so großen Unterschied, ob man nun 4 Byte oder 10 Byte (packed) herumkopiert? Zumal man mit Pointern ein zusätzliches Array benötigt, die Pointerliste.

@Coder: Records _sind_ der einfache Weg (und gehören IMO auf jeden Fall zu "rudimentärem Programmieren") . Es schadet dir sicher nichts, dich mit ihnen bekannt zu machen.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#8

Re: 4 dimensionalen Array sortieren

  Alt 20. Jun 2006, 14:49
Tutorial von Motzi zum Thema "Pointer":
http://www.manuel-poeter.de/index.php?site=tutorials

Was sind Records?:
http://www.dsdt.info/grundlagen/spra...datentypen.php


Ich würde es so machen:
- neuen Datentyp mit Hilfe von Records deklarieren (Der Datentyp beinhaltet 1*Name, 1*Datum, 2*Integer)
- anschließend ein Array des neuen Datentyps anlegen (um die Länge des Arrays mußt du dich kümmern)
- Array füllen, indem du auf die einzelnen Records zugreifst
- einen schnellen Sortieralgorithmus verwenden (Quicksort), der nun jedes Element mit jedem Element im Array vergleicht (Der Poinbter zeigt auf den Record, somit kommt man auch an die Daten: Name, Datum etc.)

Um Strings bzw. Zahlen zu vergleichen gibt es folgende Funktionen:
- CompareStr(): Integer;
- CompareText(): Integer;
- CompareValue(): Integer;
- ...

Alle 3 Funktionen liefern Zahlenwerte und mit diesen Zahlen kann man nun sortieren. Beim Vergleichen werden nun die Pointer (Reihenfolge) vertauscht, jedoch nicht die Daten auf denen der Pointer zeigt. Das spart Zeit und ist auch noch flexibel bzw. beliebig erweiterbar.
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#9

Re: 4 dimensionalen Array sortieren

  Alt 20. Jun 2006, 17:37
*nochmal den 1. Post liest*
Ups, dann hab ich dich falsch verstanden; es ging also gar nicht um die Stabilität.

Zitat von negaH:
Exakt, und schups wird QuickSort auch stabil. Hauptsache ALLE 4 Spalten werden in die Sortierung mit einbezogen.
Um Missverständnisse zu vermeiden. Hagen meint hier nicht Stabilität, sondern das, was die eigentliche Frage war(k.A. obs da n extra Wort gibt)...

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: 4 dimensionalen Array sortieren

  Alt 20. Jun 2006, 19:52
Hi Christian,

ich meinte sehr wohl Stabilität und bezog mich damit auf deine Aussage. Bei Quicksort ist es enorm wichtig das die Comparefunction (Vergleichoperation) immer eine eindeutige Sortierung erzeugt. Ist dies nicht der Fall so wird zb. die QuickSort Implementierung in der VCL (TList zb.) in einer Endloss-Schleife verenden.
Die eindeutige Vergleichoperation bezieht sich aber nur darauf das zb. nicht A > B und A <= B gleichzeitig gelten darf, oder zb. A > B und B > C und C > A.
QuickSort ist, je nach Implementierung, im Gegensatz zu anderen Verfahren, ziemlich anfällig für solche Kontradiktions in der Comparefunction, eben in-stabil !

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:24 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