• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Wir haben den Frühjahrsputz beendet, Ihr auch? Welches Foto zu dem Thema hat Euch dann am Besten gefallen? Hier geht es lang zur Abstimmung --> 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
 

Alecco

Transparent von Croncels
Registriert
17.02.09
Beiträge
306
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? :eek:
 

Mantarax

Querina
Registriert
02.12.09
Beiträge
184
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
 

iUser

Gala
Registriert
27.07.09
Beiträge
52
@*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?
 

Mantarax

Querina
Registriert
02.12.09
Beiträge
184
kp,

wenn die Bedingung "if" nicht gilt bzw. nicht mehr, soll er weiter zu "else" gehen.
 

iUser

Gala
Registriert
27.07.09
Beiträge
52
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.
 

Mantarax

Querina
Registriert
02.12.09
Beiträge
184
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..
 

iRaszibilitus

Boskop
Registriert
06.12.08
Beiträge
210
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.
 

iUser

Gala
Registriert
27.07.09
Beiträge
52
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! :)
 

Mantarax

Querina
Registriert
02.12.09
Beiträge
184
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;)
 

iUser

Gala
Registriert
27.07.09
Beiträge
52
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
 

Mantarax

Querina
Registriert
02.12.09
Beiträge
184
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..
 

iUser

Gala
Registriert
27.07.09
Beiträge
52
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 ;)
 

iUser

Gala
Registriert
27.07.09
Beiträge
52
Es hat zwar lange gedauert, aber jetzt hab ich's endlich!
Danke an jeden, der mir geholfen hat :)