1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

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

Dieses Thema im Forum "Café" wurde erstellt von iUser, 28.01.10.

  1. iUser

    iUser Gala

    Dabei seit:
    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
     
  2. Alecco

    Alecco Transparent von Croncels

    Dabei seit:
    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:
     
  3. Mantarax

    Mantarax Querina

    Dabei seit:
    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
     
  4. iUser

    iUser Gala

    Dabei seit:
    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?
     
  5. Mantarax

    Mantarax Querina

    Dabei seit:
    02.12.09
    Beiträge:
    184
    kp,

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

    iUser Gala

    Dabei seit:
    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.
     
  7. Mantarax

    Mantarax Querina

    Dabei seit:
    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..
     
  8. iRaszibilitus

    iRaszibilitus Boskop

    Dabei seit:
    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.
     
  9. iUser

    iUser Gala

    Dabei seit:
    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! :)
     
  10. Mantarax

    Mantarax Querina

    Dabei seit:
    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;)
     
  11. nate

    nate Pomme Miel

    Dabei seit:
    03.09.08
    Beiträge:
    1.491
    wieso sollte AT deine Hausaufgaben machen? -.-
     
    Der_Apfel gefällt das.
  12. iUser

    iUser Gala

    Dabei seit:
    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
     
  13. Mantarax

    Mantarax Querina

    Dabei seit:
    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..
     
  14. iUser

    iUser Gala

    Dabei seit:
    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 ;)
     
  15. iUser

    iUser Gala

    Dabei seit:
    27.07.09
    Beiträge:
    52
    Es hat zwar lange gedauert, aber jetzt hab ich's endlich!
    Danke an jeden, der mir geholfen hat :)
     
  16. Mantarax

    Mantarax Querina

    Dabei seit:
    02.12.09
    Beiträge:
    184
    Lass mal hören:)
     

Diese Seite empfehlen