• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Wer kann mir folgenden Source-Code erklären? [Java]

iUser

Gala
Registriert
27.07.09
Beiträge
52
Also eins vorneweg: dass es ein Sortierverfahren ist, weiß ich ^^
Was bedeuten die eckigen Klammern, wofür steht "array.length", wozu ist das "%"-Zeichen gut, u.v.m.

public void Shell_Sort(int[] array) {
int t = 0;
if (array.length % 2 == 0)
t = array.length >> 1;
else
t = (array.length >> 1) + 1;

while (t >= 1) {
for (int i = t,temp = 0; i < array.length; i++) {
for (int j = i - t; j >= 0; j =j - t) {
if (array[j] > array[j + t]) {
temp = array[j];
array[j] = array[j + t];
array[j + t] = temp;
}
}
}
if (t == 1)
break;
if (t % 2 == 0)
t = t >> 1;
else
t = (t >> 1) + 1;
}
}



Ich bedanke mich im vorraus ! :)


Ps: Hab es ins Café gepackt, weil mir kein anderes Forum sinvoll erschien ^^
Gruß,
iUser
 
Ich glaube in jedem Buch über Java wirst du das auf den ersten 20 Seiten finden...

BTW: Wofür hast du einen Algorithmus, wenn du nichtmal die Syntax kennst? :-!
 
HI,

array.length= Die Bedingung soll gelten, solange die Länge des Arrays (welche du durch 2 Teilst) und deren Rest 0 sein soll.> Die Länge des Arrays muss gerade sein, damit die Bedingung erfüllt ist.

mfg
 
@*Alecco: Ich habe mir den Quellcode von Wikipedia "geliehen" und darf morgen einen Kurzvortrag dazu, auch wenn ich nun wirklich keine Informatik-Leuchte bin :(

@ Mantarax: Danke dir, so so hab ichs mir vorgestellt :)
Ich will nicht zu viel von dir abverlangen, aber könntest du "else" etwas genauer erklären?
 
kp,

wenn die Bedingung "if" nicht gilt bzw. nicht mehr, soll er weiter zu "else" gehen.
 
So meinte ich das nicht ^^
Sondern eher, was nach "else" kommt..
also d.h. ja soviel wie
... andernfalls rücke t um 2 nach rechts, solange t größer/gleich 1 ist
oder?
Ich wollte mehr auf die for-Schleifen eingehen.
 
Wie kommst du darauf, dass t zwei nach rechts rückt?
% ist übrigens das Zeichen für eine Modulo-Operation was du aber bestimmt hättest selber googln können bzw was es macht..Ist aber nicht schwer..
 
Was bedeuten die eckigen Klammern <-- stelle im array
wofür steht "array.length" <-- länge des arrays
wozu ist das "%"-Zeichen gut <-- wie schon gesagt, modulo.
if (t % 2 == 0) <-- wenn t modulo 2 gleich 0, dann mache das in den klammern.

was ist modulo?
0mod2 = 0,
1mod2 = 1
2 mod2 = 0
3 mod2 = 1
usw.
 
ich dachte wegen "...>> 1) + 1" rückt t um zwei nach rechts?

Ich hab meine Übersetzung bisher folgendermaßen:
Wenn die Array-Länge geteilt durch 2 keinen Rest hat, dann wird t um eine Stelle nach Rechts verschoben
andernfalls wird t um 2 nach rechts verschoben,
bis t größer bzw. gleich 1 ist

jetzt zu den Schleifen

i hat den Anfangswert t,temp, also Null; bis i < array.länge ist; soll i mit 1 addiert werden {
j hat den Anfangswert i-t; bis j>=0 ist; soll t von j abgezogen werden{
wenn das Array mit der länge j > als das Array mit der länge j+t ist, dann {
temp(?) = das Array mit der länge j;
das Array mit der länge j = Array mit der länge j + t (verstehe ich nicht so recht ^^)
Array mit der länge j + t = temp;
}
}
}
wenn t = 1 ist
break;
wenn t durch 2 keinen Rest hat
wird t um 1 nach rechts verschoben
andernfals wird t um 2 nach rechts verschoben
}
}

ich bezweifle, dass es richtig ist, aber dafür bin ich ja hier ;)
berichtig mit! :)
 
t rückt nicht nach rechts sondern du initalisierst t neu.

Da du darüber einen Vortrag halten musst, gehört es sicherlich dazu, selbst ein bisschen herraus zu finden und nicht anderen die Arbeit für dich machen zu lassen während du schön mit schreibst:P
Und achte das nächste mal auf die Konventionen, dann ist es auch übersichtlicher;)
 
hey, ich habe mir eben nochmal die erklärung von schleifen reingehämmert!
Ich hab in dem Sinne jetzt ja kein Problem mehr, nur ob meine erklärung so richtig ist, ist die Frage.
Ich meine, ICH sehe darin keinen Fehler ;)
Nicht, dass ich das jetzt ruhigen Gewissens lerne, nur um dann morgen vom Lehrer einen hinter die Ohren zu bekommen :D

Gruß,
Michael
 
Mach es dir einfach und schreib dir ne main _Methode die dir nach jeder Zeile ausgibt, was Variablen für einen Wert haben:D
Dann wird auch dein Lehrer zufrieden sein..
 
Ich glaube das möchte er nicht sehen ^^
ich habe mir das so vorgestellt, dass ich erst ganz stupide an der Tafel Shell-Sort grafisch darstelle und dann mittels projektor vorprogrammiere, und dabei erkläre, was zur hölle das eigentlich bedeutet, was da steht ;)
 
Es hat zwar lange gedauert, aber jetzt hab ich's endlich!
Danke an jeden, der mir geholfen hat :)