[JAVA]Reiskörner berechnen

Diskutiere [JAVA]Reiskörner berechnen im Developer Network Forum im Bereich Hardware & Software Forum; Mergesort ist eigentlich recht einfach zu verstehen und auch zu implemtieren: http://de.wikipedia.org/wiki/Mergesort Mergesort arbeitet im...
  • [JAVA]Reiskörner berechnen Beitrag #41
willikufalt

willikufalt

Bekanntes Mitglied
Dabei seit
28.08.2001
Beiträge
1.481
Reaktionspunkte
0
Mergesort ist eigentlich recht einfach zu verstehen und auch zu implemtieren:
http://de.wikipedia.org/wiki/Mergesort

Mergesort arbeitet im besten, durchschnittlichen und schlechtesten Fall optimal.
(Zeitkomplexität O(n* log(n))

Auch einfach zu implementieren ist eigentlich Shellsort.
http://de.wikipedia.org/wiki/Shellsort <---- Hier ist auch Java-Code enthalten.

Auch von der Laufzeit her ist Shellsort nicht schlecht.
Allerdings ist Shellsort theoretisch ziemlich schwer zu verstehen.
 
  • [JAVA]Reiskörner berechnen Beitrag #42
J

Jakob

Bekanntes Mitglied
Dabei seit
24.06.2007
Beiträge
1.200
Reaktionspunkte
0
Ort
Hessen
Ok, dann probiere ich Mergesort.
Aber gleich die erste Frage:
So fange ich ja an: void mergesort(int links, int rechts)
Was muss ich denn hier "links" und "rechts" zuweisen? Es geht doch hier eigentlich erstmal nur um die Länge des Arrays, damit das geteilt weden kann, oder? Aber welche Werte müssen "links" und "rechts" dann haben?
 
  • [JAVA]Reiskörner berechnen Beitrag #43
FerFemNemBem

FerFemNemBem

Moderator
Teammitglied
Dabei seit
11.09.1999
Beiträge
4.494
Reaktionspunkte
0
Halloechen,

steht doch dort im (Pseudo)Code. Wenn die Liste mehr als 1 Elemente enthaelt, teilst Du sie in 2 Listen auf. Dann hast Du eine linke und eine rechte Liste.

Gruss, FFNB.
 
  • [JAVA]Reiskörner berechnen Beitrag #44
J

Jakob

Bekanntes Mitglied
Dabei seit
24.06.2007
Beiträge
1.200
Reaktionspunkte
0
Ort
Hessen
Ja, aber welche Werte bzw. wie teile ich der rechten und linken Liste die zugehörigen Werte zu?
Wenn ich jetzt das Array a habe und das 10 Felder hat, kann ich es ja nach a[4] teilen. Also bis a[4] wäre der linke Teil und ab a[5] der rechte. Aber wie weise ich das jetzt der Variablen links oder rechts zu?
 
  • [JAVA]Reiskörner berechnen Beitrag #45
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Das Problem ist, dass die Parameter in deinem Funktionskopf int's sind, also einfache Zahlen. Du brauchst aber Listen von Zahlen. Du könntest also stattdessen z.B. Arrays übergeben. Oder du machst die "unschöne" Variante mit einem globalen Array als Liste, und übergibst deiner Funktion nur die Indizes im Array (und ggfs. Längen der Listen, falls benötigt).
 
  • [JAVA]Reiskörner berechnen Beitrag #46
J

Jakob

Bekanntes Mitglied
Dabei seit
24.06.2007
Beiträge
1.200
Reaktionspunkte
0
Ort
Hessen
Und wie funktioniert das mit dem Arrays übergeben? Müsste ich dann vorher schon 2 Arrays anlegen, die ich schon aufgeteilt habe oder wie mache ich das?
 
  • [JAVA]Reiskörner berechnen Beitrag #49
J

Jakob

Bekanntes Mitglied
Dabei seit
24.06.2007
Beiträge
1.200
Reaktionspunkte
0
Ort
Hessen
Ich habe jetzt nochmal den Algorithmus von Shakersort genommen und habe das auch zum Laufen bekommen. Allerdings stellt sich mir noch die Frage: Wird Shakersort noch als Bubblesort angesehen oder ist es ein eigenes Sortierverfahren? Ich würde meinen Lehrer fragen, aber das geht erst ab Montag, da noch Ferien sind. Wenn ihr mir schon sagen könnt, dass es kein eigenständiges Verfahren ist, kann ich jetzt schon weitersuchen...
 
  • [JAVA]Reiskörner berechnen Beitrag #50
J

Jakob

Bekanntes Mitglied
Dabei seit
24.06.2007
Beiträge
1.200
Reaktionspunkte
0
Ort
Hessen
Noch eine Frage:
Was ist an dem Code für Insertionsort falsch?
Code:
  public void insertion() {
        int raus;
        int j;
        for (int i=1;i<anzahl;i++) {              //äußere Schleife : 2. Element aus Feld raus
            raus=zahlen[i];
            //schieben
            for (j=i-1  ;zahlen[j]>raus;j--) {         // innere: sortieren; i-1 -> links neben i
                zahlen[j+1]=zahlen[j];
            };
            zahlen[j+1]=raus; //rausgenommenes ins Loch     //äußere Schleife : 2. Element rein
        }
    }

Es kommt damit immer die Fehlermeldung
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at Sortieren.insertion(Sortieren.java:161)
at Sortierverfahren.button1_ActionPerformed(Sortierverfahren.java:80)
at Sortierverfahren$2.actionPerformed(Sortierverfahren.java:63)
at java.awt.Button.processActionEvent(Button.java:392)
at java.awt.Button.processEvent(Button.java:360)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
 
  • [JAVA]Reiskörner berechnen Beitrag #51
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Ich würde mal sagen, j wird negativ. In dieser Zeile
Code:
for (j=i-1  ;zahlen[j]>raus;j--) {
wird j immer verringert und die einzige Schleifenbedingung ist, dass zahlen[j] größer als raus ist. Wenn die Abbruchbedingung nicht eintritt, versucht er irgendwann, auf zahlen[-1] zuzugreifen, was nicht geht.
 
  • [JAVA]Reiskörner berechnen Beitrag #52
J

Jakob

Bekanntes Mitglied
Dabei seit
24.06.2007
Beiträge
1.200
Reaktionspunkte
0
Ort
Hessen
Ok, Danke Dir nochmal.
Habe jetzt die Quelltexte von Insertion- und Shakersort und sie scheinen zu funktionieren :) .
Dann werde ich morgen die beiden dann vergleichen und dazu einen Text verfassen...
 
Thema:

[JAVA]Reiskörner berechnen

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben