Autor Beitrag
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 05.12.04 22:20 
Leider ist deine Antwort nur teilweise richtig. Bitte versuch dich an die Fragestellung zu halten, sonst kann ich dich nicht an die entscheidenden "Erkenntnisse" heranführen. Ich würde mir 3 separate Antworten wünschen.

Bis gleich.

Zitat:
Und mit Boolean wo man zwei Werte definieren kann: true or false, geht es noch schneller mit dem Sortieren, weil er dann weiss wenn sie richtig stehen, dann nicht mehr sortiert

Das habe ich glaube ich nicht verstanden, aber vielleicht können wir das für den Augenblick beiseite lassen.
Method_Man
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 05.12.04 22:27 
1. Es wird 3 Mal verglichen.

2. Es sind überflüssige vergleiche enthalten.

3. Nach dem Sortieren, weiss man das der als letztes Steht, richtig ist, dann braucht man mit dem nicht mehr zu vergleichen.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 05.12.04 22:34 
OK, Danke.

Zu 1: Bei mir sind es zwar 9 Vergleiche (je 3 in 3 Läufen), aber ich denke mal, das hast du gemeint :wink:

Zu 2: Klar, war auch nicht schwer zu sehen.

Zu 3: Super! Genau das ist die entscheidende Optimierung!

Welche Schleifen kennt ihr denn schon? Habt ihr die FOR-Schleife schon behandelt?

Wir wollen jetzt einen Peudocode für das Sortieren aufschreiben. Dazu sind zwei Erkenntnisse wichtig:
a) Es gibt zwei Schleifen bei Bubble-Sort.
b) Es ist nicht nötig, alle Elemente mehrfach zu vergleichen.

Frage 4: Wie stehen die beiden Schleifen zueinander? Verschachtelt ( [] ) oder separat () []

Bis gleich
Method_Man
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 05.12.04 22:40 
Hi, wir haben 2 Sorten von Schleifen schon behandelt, nämlich die Post checked Loop Schleife und die While...Do... Schleife.

Bei der Post checked Loop Schleife überprüft er erst am Ende ob der Wert stimmt.

Und bei der While-Do Schleife direkt am Anfang, so wenn es stimmt damit er nicht den Wert noch erhöht und Zeit verliert.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 05.12.04 22:41 
Gut, macht es zwar etwas "undurchsichtiger" (die FOR-Schleife wäre die 1. Wahl), aber geht auch so.

Aber wie ist es mit Frage 4?
Method_Man
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 05.12.04 22:42 
Leider habe ich die Frage 4 nicht verstanden. :oops:
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 05.12.04 22:44 
Kein Problem.

Sind dir die beiden Feststellungen a) und b) klar?
Method_Man
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 05.12.04 22:45 
ja
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 05.12.04 22:48 
Wo stecken denn in dem Code-Beispiel die beiden Schleifen?

ausblenden 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:
1. Lauf  
vorher:  D C B A  
         v-v  
         C D B A  
           v-v  
         C B D A  
             v-v  
nachher: C B A D  

 
2. Lauf  
vorher:  C B A D  
         v-v  
         B C A D  
           v-v  
         B A C D  
             v-v  
nachher: B A C D  

 
3. Lauf  
vorher:  B A C D  
         v-v  
         A B C D  
           v-v  
         A B C D  
             v-v  
nachher: A B C D
Method_Man
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 05.12.04 22:58 
In jedem Durchlauf hat man garantiert einen Buchstaben richtig gestellt.


1. Lauf

Repeat If D> als C dann tausche, wenn D größer als B dann tausch, dann wenn D größer als A dann tausche, danach ist 100% richtig.

Until x=3;

vorher: D C B A
v-v
C D B A
v-v
C B D A
v-v
nachher: C B A D

Jetzt D ist auf jedem Fall richtig, deshalb muss er nur noch C, B und A vergleichen.

Wenn C > B tausche, wenn C> als A tausche, dann haben wir beide gesichert, dass C und D richtig stehen.

2. Lauf
vorher: C B A D
v-v
B C A D
v-v
B A C D
v-v
nachher: B A C D

Jetzt muss nur noch B und A verglichen werden, B ist > als A deshalb tausche.

3. Lauf
vorher: B A C D
v-v
A B C D
v-v
A B C D
v-v
nachher: A B C D

Die Richtige Stellung.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 05.12.04 23:05 
OK, du hast, zumindest sprachlich, die beiden Schleifen beschrieben; vielleicht etwas zu genau für den Moment, aber OK.

Hier nochmal die Darstellung, wir ich sie mir vorgestellt hatte:

ausblenden Quelltext
1:
2:
( wiederhole 3 mal
  [vergleiche alle elemente und tausche ggfs. aus] )


Das würde dem Code-Beispiel entsprechen, wenn man die Optimierung zunächst nicht mit berücksichtigt.

Soweit klar?
Method_Man
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 05.12.04 23:06 
Ja :)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 05.12.04 23:12 
Antwort zu 4: Die Schleifen sind also verschachtelt! ( [] )

Mal bischen Pseudocode jetzt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
zaehler := 1;
repeat
  vergleiche_alle_elemente;
  zaehler := zaehler +1;
until (zaehler >= 3);


Wir wollen mal unterstellen, es handelt sich um unsere Testbuchstaben (4 Stück). Was auch immer "vergleiche_alle_elemente" tut, kommt gleich.

Soweit klar?

Habt ihr schon Arrays behandelt? Strings? Wie habt ihr denn die "Buchstaben" im Unterricht "gespeichert", um sie zu sortieren?

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
Method_Man
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 05.12.04 23:15 
Arrays haben wir glaube ich nicht behandelt.

Wir haben uns Variablen namens help1 und help2 ausgedacht und mit String belegt.

Dann haben wir die Buchstaben zum tauschen bei help1 gespeichert, danach wieder eingesetzt.

Bei uns hat er immer den 1. Buchstaben verglichen danach einsortiert.

Beispiel: Vorname Nachname
T> A ----- Torsten Frings
tausche ----- Anton Meier
-----------------------------
Vorname Nachname
Anton Meier
Torsten Frings


Zuletzt bearbeitet von Method_Man am So 05.12.04 23:19, insgesamt 2-mal bearbeitet
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 05.12.04 23:18 
OK, anders gefragt: Wir haben unsere Testbuchstaben "A B C D". Was habt ihr denn im Unterricht zum Sortieren benutzt und wo gespeichert? In dem StringGrid?

Nächste Frage (5): Wie oft wird die Schleife aus dem letzten Beitrag durchlaufen?
Method_Man
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 05.12.04 23:21 
5. Vielleicht 9 Mal

Wir haben den Inhalt von den Stringgrids einfach in eine String Variable gespeichert.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 05.12.04 23:24 
Meinst du die Antwort 5 ernst?
Method_Man
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 05.12.04 23:38 
Ich meine natürlich 3 Mal, aber 9 wird sie vergleichen.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 05.12.04 23:40 
Leider falsch, bitte nochmal GENAU hinsehen. Anders gefragt: Wie oft wird "vergleiche_alle_elemente" ausgeführt?
Method_Man
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 05.12.04 23:46 
bis der Zähler größer oder gleich 3 ist?