Not logged in. · Lost password · Register

Simmi
Member since Feb 2011
21 posts
Subject: Frage zur Klausur SS2010 - Aufgabe 5 (Sortieren)
Hallo zusammen,

kann mir irgendjemand bei der Aufgabe 5 helfen, es geht nicht um die Beantwortung (mir ist klar das es ein Bubblesort ist :)  sondern warum es keinen unterschied macht ob in der 2. for-Schleife im Kopf ++i oder i++ steht. Beide Male ist der erste Wert den i hat 0, was doch eigentlich nicht stimmen kann, denn wenn "++i" gilt wird doch i sofort auf 1 gesetzt, was zur Folge hätte das i niemals 0 wäre...

Vielen vielen Dank schonmal :)
Der Ich
93,333% Dipl.-Exzentriker
Avatar
Member since Oct 2006
3642 posts
Quote by Simmi:
Hallo zusammen,

kann mir irgendjemand bei der Aufgabe 5 helfen, es geht nicht um die Beantwortung (mir ist klar das es ein Bubblesort ist :)  sondern warum es keinen unterschied macht ob in der 2. for-Schleife im Kopf ++i oder i++ steht. Beide Male ist der erste Wert den i hat 0, was doch eigentlich nicht stimmen kann, denn wenn "++i" gilt wird doch i sofort auf 1 gesetzt, was zur Folge hätte das i niemals 0 wäre...

Vielen vielen Dank schonmal :)

das i++ / ++i, wird erst am ende des Schleifenrumpfs ausgeführt, daher ist es augenscheinlich erstmal egal was man nimmt.
Warum ++i i++ vorzuziehen ist mach mer dann im kommenden Semester in GRa ;)
* 01.10.2006, + 28.11.2011, † 31.01.2013
meisterT
Member since Nov 2005
994 posts
In reply to post #1
Das wird wahrscheinlich klarer, wenn du dir vorstellst, wie so eine Schleife abgearbeitet wird:

Eine for-Schleife sieht ca. so aus:
for (Initialisierung; Abbruchbedingung; Nachbehandlung) {
    body...
}

transformiert in while der gleiche Code:
Initialisierung
while (Abbruchbedingung) {
    body...
    Nachbehandlung
}

Die Nachbehandlung wird also immer nach Bearbeitung des Schleifenrumpfes durchgefuehrt. Ob da i++ oder ++i steht, ist egal: in beiden Faellen wird i um 1 erhoeht, in keinem Fall wird die Initialisierung von i veraendert.
FAU Online Judge
This post was edited on 2011-02-21, 23:00 by meisterT.
Simmi
Member since Feb 2011
21 posts
Alles klar, danke :)
malte
Member since Oct 2010
28 posts
In reply to post #2
Quote by Der Ich on 2011-02-21, 22:40:
Warum ++i i++ vorzuziehen ist mach mer dann im kommenden Semester in GRa ;)
Weil der Compilerbauer versagt hat?
arw
Dipl. e.t. Dipl. q.3
Avatar
Member since Oct 2005
1892 posts
Weil der Compilerbauer versagt hat?

Meistens ja, gelegentlich ist aber auch die Sprachspezifikation ausreichend hirntot, dass es nicht anders geht als auf die langsame bescheuerte Art ohne Optimierung.
mk444
Avatar
Member since Nov 2011
69 posts
Ich habe eine Frage zur 5.a.iv)

Die mit/****/markierte Stelle wird im worst-case n·(n−1) Mal durchlaufen, wo-
bei n die Länge der Reihung m ist. Welche Verbesserung müsste an obiger Funktion
vorgenommen werden, um die Anzahl der Durchläufe im worst-case auf n·(n−1) zu 2
reduzieren? Es darf hierfür nur genau eine Zeile verändert werden! Geben Sie die Zeilennummer sowie den neuen Inhalt der Zeile an.

Ich meine der worst-case in eine absteigend-sortierte Reihe.
Wie soll ich das nun in einer Zeile verbessern?
Ich hätte gedacht indem ich einen Index nehme der von 0 hochzählt und einen anderen der von length nach unten zählt, damit die Zahlen am Anfang der Reihe direkt mit den Zahlen am Ende vertauscht werden.
Dies ist aber mit der Korrektur nur einer Zeile nicht zu bewerkstelligen, da im code mehrmals mit dem direkten Nachbarn i vs. i+1 verglichen wird.

if (m[i] >m[i+1]) {

int temp =m[i];
m[i] =m[i+1];
m[ i+1] = temp;
done = false ;

}
This post was edited on 2012-02-20, 20:08 by mk444.
Guanta
Avatar
Member since Oct 2005
307 posts
Du kannst die Laufzeit um die Hälfte verringern, indem man die Schritte der inneren for-Schleife nach jedem Durchlauf erniedrigt, da nach jedem Schritt der hoch-geblubberte Wert an seiner richtigen Stelle steht.
Also:
Z.14. } n--;

(siehe auch http://en.wikipedia.org/wiki/Bubblesort)
An eye for an eye will make the whole world blind. (Gandhi)
This post was edited on 2012-02-20, 20:14 by Guanta.
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Go to forum
Datenschutz | Kontakt
Powered by the Unclassified NewsBoard software, 20150713-dev, © 2003-2011 by Yves Goergen