Schleife erklären

MixXeD

Cadet 3rd Year
Registriert
Mai 2009
Beiträge
36
Hi
ich hab ein paar stunden informatik verpasst und dabei wurde die schleife vom lehrer rausgegeben nur iwie verstehe ich die nicht und so richtig erklären kann mir die auch keiner.

Ich weiß nur, dass die zum sortieren von zahlen im array ist




int tausch = 0; //Zwischenspeicher zum tauschen


for (int i = 0; i < array.length; i++)
{
for (int j = 0; j < array.length - 1; j++ ) { //array.length - 1 vom letzten element aus

if (array[j] >= array[j+1])
{
tausch = array[j];
array[j] = array[j+1];
array[j+1] = tausch;
}
}
}



mfg MixXeD
 
Hier werden die Werte in 1 Array vertauscht. Ich vermute es handelt sich um Bubblesort.
Als erstes wird der Wert von array an der Position j in eine temporäre Variable gespeichert. Danach wird der Wert vom array an der Position j+1 an der Position j gespeichert, dabei wird der Wert in array j überschrieben (deshalb die "tausch" Variable). Danach wird der Wert von tausch im array an der Stelle j+1 gespeichert. Dies geschieht falls der Wert in array an Position j größer ist als der an Position j+1.
 
Zuletzt bearbeitet:
Das ist das Bubblesortverfahren

Bei Wikipedia sollte das mit den Schleifen generell erklärt werden.
 
Das stimmt schon das es sortiert.. es guckt nach im array, ob die nächste zahl größer ist als die vorige, und wenn dies nicht zutrifft wird die nächste mit der vorigen einfach getauscht das es so ist.

lg
 
Was eine Schleife macht, weißt du aber, oder?
Na gut:
die äußere Schleife geht praktisch jedes Element des Arrays durch. Die innere (komischerweise) auch.
Das dürfte soweit klar sein.
(Bei jedem Schleifendurchlauf der äußeren Schleife wird die gesamte innere Schleife abgearbeitet)
So: Bei jedem Durchlauf der inneren Schleife wird überprüft, ob ein Element größer als das andere ist und wenn ja, tauschen beide Elemente ihre Position im Array. (Es ist übrigens dumm ">=" als Vergleichsoperator zu nehmen)

Gruß Timo
 
hi,
mal kurz an einem beispiel

im array sind [5,7,12,1]

ordnet er dann im ersten mal so dass da steht [5,7,1,12]
in der 2. [5,1,7,12]
und der 3.[1,5,7,12]
 
MixXeD schrieb:
hi,
mal kurz an einem beispiel

im array sind [5,7,12,1]

ordnet er dann im ersten mal so dass da steht [5,7,1,12]
in der 2. [5,1,7,12]
und der 3.[1,5,7,12]

Ja das müsste so hinkommen. Wikipedia beschreibt es gut :)

Mach dir doch ein System.out wenn du Verständnisprobleme hast, dann kannst du jeden schritt mitverfolgen.
Code:
int tausch = 0; //Zwischenspeicher zum tauschen


for (int i = 0; i < array.length; i++)
{
for (int j = 0; j < array.length - 1; j++ ) { //array.length - 1 vom letzten element aus

if (array[j] >= array[j+1])
{
tausch = array[j];
array[j] = array[j+1];
array[j+1] = tausch;
}
}
for (int j = 0; j < array.length - 1; j++ ) {
System.out.print(array[j] + ", ");
}
System.out.println();
}

Edit: Sorry hab mich bei den Klammern vertan, jetzt sollte es in Ordnung sein.
 
Zuletzt bearbeitet:
hi
und wofür braucht man dann diese zeile?
for (int j = 0; j < array.length - 1; j++ ) { //array.length - 1 vom letzten element aus
und was bedeutet das?
array.length ist das die länge von einem array?
 
MixXeD schrieb:
und wofür braucht man dann diese zeile?
Wikipedia schrieb:
Der oben genannte Schritt wird solange wiederholt, bis die Reihe komplett sortiert ist! Dabei muss das letzte Element des vorherigen Durchlaufs aber nicht mehr betrachtet werden, da es seine endgültige Position schon gefunden hat.
Der Text, den du eingegeben hast, ist zu kurz. Bitte erweitere den Text auf die minimale Länge von 1 Zeichen.
 
Hier ist eine schleife die von 0 ... bis der länge des Arrays -1 geht. Bei jedem Schritt wird j um +1 erhöht. Du kannst statt j++ auch "j+1" schreiben, es ist das gleiche.
array.length ist eine Zahl und bedeutet die Länge. In deinem Beispiel wäre array.length = 4. die -1 ist weil ein Array bei 0 und nicht bei 1 anfängt, deshalb ist 4 - 1 = 3 (da 0,1,2,3 - also 4 Positionen).
 
baizon schrieb:
die -1 ist weil ein Array bei 0 und nicht bei 1 anfängt, deshalb ist 4 - 1 = 3 (da 0,1,2,3 - also 4 Positionen).
Die -1 ist, weil das letzte Element schon an der richtigen Stelle steht. Der 0-index wird schon durch < bedacht in der Bedingung.
 
Yuuri schrieb:
Die -1 ist, weil das letzte Element schon an der richtigen Stelle steht. Der 0-index wird schon durch < bedacht in der Bedingung.

Sorry, du hast natürlich recht :) Danke für die Korrektur.
 
Yuuri schrieb:
Die -1 ist, weil das letzte Element schon an der richtigen Stelle steht. Der 0-index wird schon durch < bedacht in der Bedingung.

Ja genau genommen weil mit dem Element j+1 getauscht(EDIT: bzw. in der IF-Anweisung verglichen) wird und würde man hier alle Elemente durchlaufen würde man den Speicherbereich verlassen, was zu einem "Segmentation Fault" führen würde. ;)
Code:
int tausch = 0; //Zwischenspeicher zum tauschen 


for (int i = 0; i < array.length; i++)
{
for (int j = 0; j < array.length - 1; j++ ) { //array.length - 1 vom letzten element aus

if (array[j] >= array[[B]j+1[/B]])
{
tausch = array[j];
array[j] = array[[B]j+1[/B]];
array[[B]j+1[/B]] = tausch;
}
}
}

Außerdem sehe ich grade das bei der if-Anweisung auch mit >= verglichen wird und somit auch bei Gleichheit getauscht.
Ein > würde den gleichen Zweck erfüllen und wäre noch dazu schneller.
Wobei der Bubblesort eh schon sowas von langsam ist :D
 
Zuletzt bearbeitet:
Hi,
VIELEN, VIELEN DANK!!! :) :)

ohne euch hätte ich da ewig dran gerätselt und am ende iwas zurechgereimt :D


Mfg MixXeD
 
Zurück
Oben