Schleife erklären

MixXeD

Cadet 3rd Year
Dabei seit
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
 

baizon

Commander
Dabei seit
Juni 2007
Beiträge
2.084
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:

Drakonomikon

Commander
Dabei seit
Okt. 2005
Beiträge
2.646
Das ist das Bubblesortverfahren

Bei Wikipedia sollte das mit den Schleifen generell erklärt werden.
 

D3AD

Cadet 3rd Year
Dabei seit
Okt. 2009
Beiträge
41
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
 

yoT!mO

Commander
Dabei seit
März 2007
Beiträge
2.700
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
 

MixXeD

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
Mai 2009
Beiträge
36
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]
 

baizon

Commander
Dabei seit
Juni 2007
Beiträge
2.084
Zitat von MixXeD:
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:

MixXeD

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
Mai 2009
Beiträge
36
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?
 

Yuuri

Fleet Admiral
Dabei seit
Okt. 2010
Beiträge
13.795
Zitat von MixXeD:
Zitat von Wikipedia:
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.
 

baizon

Commander
Dabei seit
Juni 2007
Beiträge
2.084
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).
 

Yuuri

Fleet Admiral
Dabei seit
Okt. 2010
Beiträge
13.795
Zitat von baizon:
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.
 

baizon

Commander
Dabei seit
Juni 2007
Beiträge
2.084

Fonce

Captain
Dabei seit
Feb. 2006
Beiträge
3.303
Zitat von Yuuri:
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:

MixXeD

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
Mai 2009
Beiträge
36
Hi,
VIELEN, VIELEN DANK!!! :) :)

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


Mfg MixXeD
 
Top