Autor |
Beitrag |
Skittles
Hält's aus hier
Beiträge: 4
|
Verfasst: Sa 30.08.03 13:02
Also, mein Problem ist, ich soll 100 zufallig erzeugte Zahlen in 100 versiedene Araays einlesen(das hab ich schon)
dann soll ich aber (PROBLEM!!) diese 100 Araays nach der größe der zugeordneten Zahlen sortieren und diese dann in einer Tabelle ausgeben, das in der Tabelle ausgeben würd ich auch grad noch hinbekommen, ich weiß aber leider nicht, wie man ARRAYS sortiert, da ich das noch nicht im unterricht hatte und mein buch auch nicht so perfekt viel dazu ausspuckt!
Ich wär also froh, wenn mir einer von euch das ma etwas näher bringe könnte!!
Thx
|
|
Taurin
      
Beiträge: 34
Win XP
D6 Personal
|
Verfasst: Sa 30.08.03 14:25
a) Das Ding heißt Array und nicht Araay
b) Ich bin mir ziemlich sicher, dass du nicht 100 Arrays hast,
sondern eins mit 100 Elementen. Weist du überhaupt, was
ein Array genau ist?
c) Ich würde nen Bubblesort machen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var arr :array[1..100] of integer; a, b, tmp :integer; begin for a := 1 to 100 do for b := a + 1 to 100 do if arr[a] > arr[b] then begin tmp := arr[a]; arr[a] := arr[b]; arr[b] := tmp; end; end; |
Das ist die einfachste Variante, ein Array zu sortieren, ohne dazu
ein neues Array anzulegen. Aber leider auch eine der langsamsten.
|
|
Skittles 
Hält's aus hier
Beiträge: 4
|
Verfasst: Sa 30.08.03 14:35
Titel: Falsch verstanden
Also, ich hab das alles auf die schnlle und total genervt geschieben, weil das halt alles nicht geht!
ich meinen nen array mit 100 elementen, aber der soll auch ggf. 500000Elemente bekommen können, deshalb sollte man das möglichst nicht mit bubblesort machen, weil der is dann ja in 10 stunden nich fertig!!
Naja, dauert halt irrelang!
Ich weiß auch was ein array is (glaub ich zumindest)
Aber was ich nicht weiß wie ich das sortier!!! und ich finde nur immer so allgemeine sachen wie z.B. Quicksort, aber ich weiß einfach nicht, wie ich das mit arrays mach und so, hatte das halt noch nicht!!
BITTE HELFT MIR!!!!
THX
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 30.08.03 14:38
Hallo!
Vielleicht hilft dir diese Seite weiter.
MfG
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Skittles 
Hält's aus hier
Beiträge: 4
|
Verfasst: Sa 30.08.03 14:44
Titel: Hilft nicht wirklich!
Also, auf der Seite war ich schon einmal, dadrüber hab ich immerhin schon mal den Code dafür gefunden, mein problem ist aber, wir bekomme ich es hin, das er dadurch, die 100 (bzw. biszu 500000)Elemente meines Arrays damit in die richtige reihenforge bringt?
sodass ich sie danach einfach nur in meiner tabelle ausgeben muss?
kann mir dabei jemand helfen? Denn der allgemeine Code hilft mit dabei nicht so sehr viel weiter!
MFG
|
|
FeG
      
Beiträge: 77
Win XP Home, SuSE Linux 8.2 Prof
D3 Prof, D7 Prof
|
Verfasst: Sa 30.08.03 14:45
Hallo,
erstmal enthält das Beispiel von Taurin einen ziemlich üblen Fehler: Wenn das Array in der letzten Schleife angekommen ist (a=100), dann wird b am Ende 200 !!! und arr[200] gibt's net, viel Spaß mit der Zugriffsverletzung!
Ein richtiges Beispiel für den Sortieralgorithmus gibt's hier...
Wenn dir der aber zu langsam ist, mal Google mit "Quicksort", "Shellsort" oder ähnlichem nerven...
MfG,
FeG
//edit: Wie man an den Delphi-Demos (Threads) sehen kann, braucht Bubblesort für 114 Einträge weniger als eine Sekunde... Das lässt sich doch verkraften oder? Ansonsten musst du dich halt durch Shellsort oder Quicksort oder einen anderen "durchbeißen"
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 30.08.03 15:02
Zitat: | Also, auf der Seite war ich schon einmal, dadrüber hab ich immerhin schon mal den Code dafür gefunden, mein problem ist aber, wir bekomme ich es hin, das er dadurch, die 100 (bzw. biszu 500000)Elemente meines Arrays damit in die richtige reihenforge bringt? |
Wenn ich das jetzt mal etwas provokativ fragen darf: was glaubst, was die Codes auf dieser Seite machen? Eier zählen
Die Prozedur zum Sortieren habe ich 1:1 von der Seite genommen, daher habe ich sie im Quelltext nicht nochmal ausführlich drin.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| zahl : Array of Integer;
implementation
{$R *.dfm}
Procedure Quicksort (l,r: integer);
var i,j,Mitte,Merke : Integer;
begin
end;
procedure TForm1.Button1Click(Sender: TObject); VAR i : INteger; begin Randomize; SetLength(zahl, 500); for i:=0 TO High(zahl) do zahl[i]:=Random(Length(zahl));
Quicksort(0,High(zahl)); ListBox1.Clear; for i:=0 TO High(zahl) do ListBox1.Items.Add(IntToStr(zahl[i])); end; |
MfG
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Skittles 
Hält's aus hier
Beiträge: 4
|
Verfasst: Sa 30.08.03 15:24
Titel: versucht!
ich habe versucht es jetzt auf mein programm zuzuschneiden, aber leider zeigt er mir nun bei der ausgabe nur noch nullen an!!!
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| Procedure TFAnwendung.Quicksort (l,r: integer);
var i,j,Mitte,Merke : Integer;
begin i:=l; j:=r; Mitte:=Zahlen[(l+r) div 2]; repeat while Zahlen[i]<Mitte do Inc(i); while Mitte<Zahlen[j] do Dec(j); if i<=j then begin Merke:=Zahlen[i]; Zahlen[i]:=Zahlen[j]; Zahlen[j]:=Merke; Inc(i); Dec(j); end; until i>j; if l<j then QuickSort (l,j); if i<r then Quicksort (i,r); end;
procedure TFAnwendung.BsortiertClick(Sender: TObject); var i,k,z,s :integer;
begin A:= strtoint (EAnzahl.text); While i < A do begin i:= i+1; Zahlen[i]:= Random (A); end;
Quicksort(0,High(zahlen)); k:=1; While A>k do begin for z:= 0 to 28 do for s:= 0 to 6 do begin SGvorgabe.Cells[s,z]:= inttostr (Zahlen[k]); k:=k+1; end; end; end; |
ich weiß nicht woran es ligt und ob ihr mir so helfen könnt, aber versucht es bitte!!!
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 30.08.03 16:29
Also, hier ein paar Sachen, die nicht unbedingt etwas mit dem Problem zu tun haben müssen, aber hilfreich sein könnten.
(1) Die Variable i wird nicht initialisiert
(2) hast Du Randomize aufgerufen?
(3) bei der Ausgabe startest Du mit k bei 1, jedoch beginnt das Array (nehme ich mal an) bei 0. Wenn es nicht bei Null, sondern bei 1 beginnt, musst Du das bei dem Aufruf von Quicksort noch ändern.
(4) Wenn A größer als 29*7 ist, dann werden die ersten Zellen wieder überschrieben
So, mehr fällt mir erst einmal nicht auf. Vielleicht hilft etwas davon, wenn nicht, dann melde Dich nochmal.
MfG
Peter
//Edit: Könntest Du demnächst statt den Code- die Delphi-Tags verwenden?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Taurin
      
Beiträge: 34
Win XP
D6 Personal
|
Verfasst: So 31.08.03 01:39
FeG hat folgendes geschrieben: |
erstmal enthält das Beispiel von Taurin einen ziemlich üblen Fehler: Wenn das Array in der letzten Schleife angekommen ist (a=100), dann wird b am Ende 200 !!! und arr[200] gibt's net, viel Spaß mit der Zugriffsverletzung!
Ein richtiges Beispiel für den Sortieralgorithmus gibt's hier...
|
Ich seh da keinen üblen Fehler. Wie soll b bei 200 ankommen, wenn
die for-Schleife ein to 100 als Begrenzung enthällt ???? Der von
dir gepostete Code führt übringens pro Arrayelement (minus eins) ein überflüssigen Vergleich aus: Es wird loop2 mit loop initialisiert, das erste
if der inneren
Schleife vergleicht also zwei identische Arrayelemente. Grober Schönheits-
fehler !
Und wenn wir beim Haarespalten sind:
Mein Code hat auch einen kleinen Schönheitsfehler, einen Überflüssigen
durchlauf der äußeren Schleife: Beim letzten durchlauf sieht die innere
Schleife so aus:
for b := 101 to 100 -- und das wird natürlich abgebrochen. b wird dann
auch bestimmt nicht 200
(Funktionieren tut er, und das besser als deiner, FeG !)
|
|
FeG
      
Beiträge: 77
Win XP Home, SuSE Linux 8.2 Prof
D3 Prof, D7 Prof
|
Verfasst: So 31.08.03 10:20
Taurin hat folgendes geschrieben: | Ich seh da keinen üblen Fehler. Wie soll b bei 200 ankommen, wenn die for-Schleife ein to 100 als Begrenzung enthällt ???? |
Oh, ja, sorry vielmals, hatte ich überlesen
Nichts für ungut...
MfG,
FeG
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 31.08.03 12:54
Trotzdem würde ich versuchen, bei später mal 500000 Elementen einen Quicksort ans Laufen zu bekommen.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Taurin
      
Beiträge: 34
Win XP
D6 Personal
|
Verfasst: So 31.08.03 14:02
Peter Lustig hat folgendes geschrieben: | Trotzdem würde ich versuchen, bei später mal 500000 Elementen einen Quicksort ans Laufen zu bekommen. |
Da wollen wir auch gar nicht wiedersprechen  Skittles erstes Posting
war bloß ein wenig konfus, da hab ich ihm erstmal das einfachste
vorgeschlagen.
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Di 21.12.04 12:01
@Taurin
Den im deinen Post geschriebene Bubblesort funktioniert nicht. Ich habe das Verfahren mit 10 000 Zahlen versucht. Da sortiert er nur die ersten Zahlen, die letzten aber nicht!
Schau mal hier vorbei für die Beschreibung der BubbleSort: http://de.wikipedia.org/wiki/Bubblesort#Formaler_Algorithmus
und den Delphi-Quellcode findest du unter http://www.delphi-source.de/tipps/?id=368.
Probier die mal aus.
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Di 21.12.04 12:21
|
|