Quicksort Programm hängt sich auf

Neamalk

Mitglied
Hallo Leute,
im Informatikunterricht haben wir vor nicht allzu langer mit Java begonnen und nun wurde mir Aufgabe gestellt, ein Programm zu entwerfen, welches die Effizienz von Sortieralgorithmen miteinander vergleicht. Dazu muss ich unter anderem eine Klasse für Quicksort schreiben, welche ein zufälliges Integer Array ordnet. In einem Formular wird dabei die Länge des Array, sowie der kleinste und größte Wert eingegeben. Die Methode wird mit einem Buttonclick aufgerufen. Nun hängt sich jedoch das Programm auf, wenn man auf den Button drückt, obwohl keine Fehlermeldungen angezeigt werden.
Hier ist der Quelltext für die Klasse:
Java:
public class Quick extends Oberflaeche
{
  public Quick()
  {
    super("");   
  }

  public static int[] Quicksort(int lowerbound, int upperbound, int[] zusortieren)
  {
    int i = lowerbound;
    int j = upperbound;
    //upper and lowerbound Indizes für Teillisten
   
    int pivot = zusortieren[i + (j - i ) / 2];
    //Pivotelement wird in der Mitte von upper und lowerbound festgelegt
    while (i <= j)
    {
      while (zusortieren[i] < pivot)      //von links überprüft, welche Elemente > als Pivot sind
        i++;
       
      while (zusortieren[j] > pivot)      //von rechts überprüft, welche Elemente kleiner als Pivot sind
        j--;
     
      if (i < j)                         
      /*
      *wenn ein Element rechts und links gefunden wurden, werden sie getauscht
      *Ergebnis: Elemente links von Pivot kleiner als Pivot, rechts größer
      */
      {
        int temp = zusortieren[i];
        zusortieren[i] = zusortieren[j];
        zusortieren[j] = temp;
      }
    }
   
    //Array wird in zwei Teile zerlegt, eins links vom Pivot, eins rechts
    //Teilarrays nach selbem Prinzip geordnet
    if (lowerbound < j)                     
      Quicksort(lowerbound, j, zusortieren);
   
     
    if (i < upperbound)
      Quicksort(i, upperbound, zusortieren);

    //geordnetes Array wird zurückgegeben
    return zusortieren;
  }
}

und so wird die Methode innerhalb der Buttonprozedur aufgerufen (A ist vom Typ int[]):

A = Quick.Quicksort(0, A.length - 1, A);

Hätte irgendjemand vielleicht eine Idee, wieso das Programm nicht funktioniert?
Vielen Dank schon einmal im Voraus
 

Blender3D

Top Contributor
Habe Dir quicksort geschrieben der funktioniert. :rolleyes:

Code:
public class start {
    public static void main(String[] args) {
        int[] data = { 3, 5, 3, 7 };
        quicksort(data);
        for (int i : data)
            System.out.println(i);
    }

    public static void quicksort(int[] data) {
        if (data == null || data.length == 1)
            return;
        quicksort(0, data.length - 1, data);
    }

    private static void quicksort(int left, int right, int[] data) {
        if (left < right) {
            int pos = split(left, right, data);
            quicksort(left, pos, data);
            quicksort(pos + 1, right, data);
        }
    }

    private static int split(int left, int right, int[] data) {
        int i = left;
        int j = right - 1;
        int pivot = data[right];
        do {
            // find from left element bigger than pivot
            while (data[i] < pivot && i < right - 1)
                i++;
            // find from right element smaller or equal than pivot
            while (data[j] >= pivot && j > left)
                j--;
            if (i < j)
                swap(i, j, data);

        } while (i < j); // till i passes j
        if (data[i] > pivot)
            swap(i, right, data);
        return i; // return position of pivot
    }

    private static void swap(int i, int j, int[] data) {
        int tmp = data[i];
        data[i] = data[j];
        data[j] = tmp;
    }

}
 

Meniskusschaden

Top Contributor
@Neamalk: Dein Algorithmus hat noch zwei Probleme. Du näherst dich von links und rechts dem Pivotelement an, so dass zum Schluß i==j gelten müsste. In dem Fall brichst du die Schleife aber nicht ab, so dass es endlos weiter läuft.

Das zweite Problem ist, dass du die beiden zu sortierenden Teilarrays so bemisst, dass das Pivot-Element enthalten ist. Das ist unnötig, weil es sich bereits an der korrekten Position befindet und führt letztendlich dazu, dass das Programm nicht terminiert, sondern einen Stapelüberlauf erzeugt.
 
X

Xyz1

Gast
ein Programm zu entwerfen, welches die Effizienz von Sortieralgorithmen miteinander vergleicht.
Falsche Herangehensweise....
Effizienzen ermittelt man nicht ,in dem man sie misst.
Effizienzen ermittelt man durch Ableitungen und Folgerungen.

Das bedeutet, du musst dem Lehrer sagen, dass das blöde ist, die Geschwindigkeit von Sortieralgorithmen nach Implementierung anhand Beispielen zeitlich messen zu wollen.
 
X

Xyz1

Gast
if (lowerbound < j)
if (i < upperbound)
schreibe zB das soherum auf:
Java:
if (j < lowerbuound)

if (j > upperbound)

dann ist das leichter zu lesen - und etwaige Zeichendreher fallen sofort auf

public static int[] Quicksort(int lowerbound, int upperbound, int[] zusortieren)
teile das wie es @Blender3D gemacht hat in mehrere Methoden auf

while (zusortieren[i] < pivot)
da muss glaube ich eine zusätzliche Bedingung hin - oder davor
damit Du nicht out of range bist

Quicksort(lowerbound, j, zusortieren);
Endlosrekursion möglich
 

Neamalk

Mitglied
Falsche Herangehensweise....
Effizienzen ermittelt man nicht ,in dem man sie misst.
Effizienzen ermittelt man durch Ableitungen und Folgerungen.

Das bedeutet, du musst dem Lehrer sagen, dass das blöde ist, die Geschwindigkeit von Sortieralgorithmen nach Implementierung anhand Beispielen zeitlich messen zu wollen.

Die theoretische Ableitung machen wir auch, das Programm dient nur zur Anschaulichkeit.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Quicksort Rang ausgeben Allgemeine Java-Themen 2
M Quicksort Partition Allgemeine Java-Themen 0
Zrebna Quicksort-Algorithmus - zufälliges Pivot wählen Allgemeine Java-Themen 6
Kirby.exe Quicksort Allgemeine Java-Themen 5
D Pivot-Wahl beim QuickSort steigert die Effizienz, eine Lüge??? Allgemeine Java-Themen 17
D QuickSort (Pivotelement) Allgemeine Java-Themen 2
R Quicksort 3 Median funktioniert nur unzuverlässig Allgemeine Java-Themen 2
S Alphabetische sortierung mit Quicksort Allgemeine Java-Themen 10
S Quicksort Problem Allgemeine Java-Themen 4
S Frage zu dieser Quicksort Variante Allgemeine Java-Themen 2
G QuickSort Allgemeine Java-Themen 7
G ArrayList mit quicksort sortieren Allgemeine Java-Themen 9
D QuickSort, Interface Allgemeine Java-Themen 2
G QuickSort mit 2 Kriterien durchführen Allgemeine Java-Themen 12
Jose05 Umgang mit Exceptions in einen Programm Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
T Der Aufruf von CMD-Programm Allgemeine Java-Themen 30
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
B Mysteriöse Ergebnisse beim Baccarat Programm? Allgemeine Java-Themen 13
districon Programm zum Durchsuchen von (Ebay-)Artikeln Allgemeine Java-Themen 1
T Addons im eigenen Programm Allgemeine Java-Themen 1
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
D Programm designen Allgemeine Java-Themen 1
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
O 2D-Grafik BioFarben-Programm soll auf Vollbild schalten Allgemeine Java-Themen 1
S Nachrichten Filter Programm Allgemeine Java-Themen 14
S Programm schreiben, das mir aufgrund von Schlagwörtern, die ich im Internet suche, relevante Themen sofort anzeigt. Allgemeine Java-Themen 1
T Hilfe bei Programm. IDE: Eclipse mit EV3-Plugin, lejos Allgemeine Java-Themen 8
Lukas2904 Swing Anzeigen lassen das das Programm geschlossen wurde Allgemeine Java-Themen 3
TechnikTVcode Mail Programm Allgemeine Java-Themen 2
S Programm entwickeln, welches ein Dreieckspuzzle lösen kann Allgemeine Java-Themen 5
R Lesen von Interfaces (Programm Vervollständigen) Allgemeine Java-Themen 10
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
OSchriever Linux-Programm öffnen Allgemeine Java-Themen 6
P USER Management in SQL übergreifend auf JAVA Programm Allgemeine Java-Themen 41
L Eclipse Konsole im exportierten Programm Allgemeine Java-Themen 2
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
P Erstelltes Programm ist doppelt so groß Allgemeine Java-Themen 11
N Programm nach Abschluss neustarten lassen Allgemeine Java-Themen 6
S Einfaches Programm programmieren Allgemeine Java-Themen 5
M kleines KI Programm Idee Allgemeine Java-Themen 7
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
N Programm startet nicht, nur per cmd Allgemeine Java-Themen 5
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
E Java Programm mit Clients erweitern - Möglichkeiten? Allgemeine Java-Themen 2
Joker4632 Methoden Befehl an bereits extern geöffnete Programm-spezifische Konsole senden Allgemeine Java-Themen 1
M Dieses Programm schneller machen? Allgemeine Java-Themen 2
R Programm zur Rekursion Allgemeine Java-Themen 5
S Compiler-Fehler Programm verhält sich in Eclipse anders Allgemeine Java-Themen 1
B Input/Output Programm zum Auslesen/Beschreiben von Textdateien, wie Geschwindigkeit erhöhen? Allgemeine Java-Themen 18
dereki2000 Programm veröffentlichen Allgemeine Java-Themen 14
mrbig2017 Threads Chat Programm mit Threads? Allgemeine Java-Themen 2
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
J Java "Bank Programm" Brauche eure Hilfe Allgemeine Java-Themen 3
S Java Programm (Spiel mit den Boxen) Allgemeine Java-Themen 1
kodela Programm hängt in der Ereigniswarteschlange Allgemeine Java-Themen 13
A Java Programm verbessern/vereinfachen Allgemeine Java-Themen 20
P Programm darf nicht mehrfach startbar sein Allgemeine Java-Themen 16
S Programm hängt sich manchmal (selten) auf Allgemeine Java-Themen 9
JavaNewbie2.0 Programm nicht im Taskmanager schliesen können Allgemeine Java-Themen 15
J XML Datei mit installiertem Programm öffnen Allgemeine Java-Themen 7
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
JavaNewbie2.0 Programm bleibt "stehen" Allgemeine Java-Themen 2
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
E Mit Java ein Python Programm starten Allgemeine Java-Themen 20
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
Aruetiise Methoden .jar mit Programm öffnen Allgemeine Java-Themen 2
C anderes Programm schließen! Allgemeine Java-Themen 5
C Webseiten Programm problem Allgemeine Java-Themen 5
E Programm auf Installation prüfen Allgemeine Java-Themen 1
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
E Programm ohne Windowsrand(Vollbild) ? Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
P Schnittstelle java Programm zu Webserver / Browser Allgemeine Java-Themen 2
J Schutz Programm Jar Exe Allgemeine Java-Themen 7
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
U Input/Output Warum wirft mir das Programm diesen Fehler? Allgemeine Java-Themen 6
X jvm exception abfangen und an externes Programm schicken Allgemeine Java-Themen 4
B Programm updaten mit FXLauncher Allgemeine Java-Themen 1
D Nicht quelloffenes Programm Allgemeine Java-Themen 5
F Java-Programm lizensieren Allgemeine Java-Themen 21
I Programm im Hintergrund bei Windows zur Steuerung der Tastatur nutzen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben