Quicksort Laufzeit langsam

MrXeth

Aktives Mitglied
Hi Leute,
irgendwie ist mein Quicksort- Algorithmus voll langsam:/ kann mir da wer helfen?

Java:
public class Sortieren
{
    // Deklaration Array
    private int []Array;

    /**
     * Konstruktor für Objekte der Klasse Sortieren
     */
    public Sortieren()
    {
        // Array initalisieren mit Zufallslänge
        Array = new int[(int)(Math.random()*10)];
        // Array Zufallszahlen zuweisen
        for(int i= 0; i < Array.length; i++)
        {
            Array[i] = (int)(Math.random()*10);
        }
    }

    /**
     * Konstruktor für Objekte der Klasse Sortieren
     *
     * @param Laenge    Länge des Arrays
     */
    public Sortieren(int Laenge)
    {
        // Array initalisieren mit groeße
        Array = new int[Laenge];
        // Array Zufallszahlen zuweisen
        for(int i= 0; i < Array.length; i++)
        {
            Array[i] = (int)(Math.random()*10);
        }
    }

    /**
     * Main Methode der Klasse Sortieren (Selbstinitialisierung)
     *
     * @param args  Wird vom System benötigt, um Objekt zu konstruieren     
     */
    public static void main(String[] args)
    {
        // Selbstinitialisierung und Programm starten
        (new Sortieren()).start();
    }
    /*
    /**
     * Main Methode der Klasse Sortieren (Mit Hilfsobjekt)
     *
     * @param args  Wird vom System benötigt, um Objekt zu konstruieren     
     */
    /*
    public static void main(String[] args)
    {
    Sortieren s = new Sortieren();
    s.start();
    }
     */  
    /**
     * Methode, die den eigentlichen Programmablauf durchgeht    
     */
    public void start()
    {
        System.out.println("quickSort:");
        System.out.println();
        long startZeit = System.nanoTime(); // Anfangszeit für Laufzeitberechnung
        this.sortieren(Array, 0, Array.length-1);
        System.out.println("Benötigte Zeit zum Sortieren in Nanosekunden: "+(System.nanoTime()-startZeit)+""); //Laufzeitberechnung
        System.out.println();
        this.arrayAusgeben();

        this.neueWerte();

        System.out.println("bubbleSort:");
        System.out.println();
        startZeit = System.nanoTime();
        this.bubbleSort();
        System.out.println("Benötigte Zeit zum Sortieren in Nanosekunden: "+(System.nanoTime()-startZeit)+"");  //Laufzeitberechnung
        System.out.println();
        this.arrayAusgeben();

        this.neueWerte();

        System.out.println("bubbleSort(Rekuriv):");
        System.out.println();
        startZeit = System.nanoTime();
        this.bubbleSortRekursiv();
        System.out.println("Benötigte Zeit zum Sortieren in Nanosekunden: "+(System.nanoTime()-startZeit)+"");  //Laufzeitberechnung
        System.out.println();
        this.arrayAusgeben();

        this.neueWerte();

        System.out.println("selectionSort:");
        System.out.println();
        startZeit = System.nanoTime();
        this.selectionSort();
        System.out.println("Benötigte Zeit zum Sortieren in Nanosekunden: "+(System.nanoTime()-startZeit)+"");  //Laufzeitberechnung
        this.arrayAusgeben();
    }

    /**
     * Methode, um das sortierte Array auszugeben
     */
    private void arrayAusgeben()
    {
        //Array mittels for-Schleife ausgeben
        for(int i = 0; i < Array.length; i++)
        {
            System.out.println("Stelle: "+i+"; Inhalt: "+Array[i]+"");
        }
        System.out.println();
    }

    /**
     * Methode, um den Feldern des Arrays neue Zufallswerte zuzuweisen
     */
    public void neueWerte()
    {
        // Array Zufallszahlen zuweisen
        for(int i= 0; i < Array.length; i++)
        {
            Array[i] = (int)(Math.random()*10);
        }
    }

    /**
     * Methode, um das Array nach dem bubbleSort Algorithmus zu sortieren
     */
    public void bubbleSort()
    {
        // Jedes Feld mit jedem vergleichen
        for(int i = 0; i < Array.length; i++)
        {        
            for(int j = 0; j < Array.length-1; j++)
            {
                // Wenn Array an der Stelle i größer ist, als Array an der Stelle j beide Werte tauschen aufrufen
                if(Array[i] < Array[j])
                {
                    int help = Array[i];
                    Array[i] = Array[j];
                    Array[j] = help;
                }
            }
        }
    }

    /**
     * Methode, um das Array nach dem bubbleSort Algorithmus(rekursiv) zu sortieren
     */
    public void bubbleSortRekursiv()
    {
        // Inhalt des Feldes mit anderen Feldern des Arrays vergleichen
        for(int i = 0; i < Array.length-1; i++)
        {        
            // Wenn Array an der Stelle i größer ist, als Array an der Stelle j beide Werte tauschen und bubbleSort rekursiv aufrufen
            if(Array[i] > Array[i+1])
            {
                int help = Array[i];
                Array[i] = Array[i+1];
                Array[i+1] = help;
                bubbleSort();
            }
        }
    }

    /**
     * Methode, um das Array nach dem selectionSort Algorithmus zu sortieren
     */
    public void selectionSort()
    {
        // an der ersen Stelle bis zum Ende des Arrays hochzählen
        for(int i = 0; i < Array.length-1; i++)
        {
            // ab Stelle i mit den weiterfolgenden Werten vergleichen
            for(int j = i + 1; j < Array.length; j++)
            {
                // wenn der Wert an j kleiner ist als an i, Werte tauschen
                if(Array[j] < Array[i])
                {
                    int help = Array[i];
                    Array[i] = Array[j];
                    Array[j] = help;
                }
            }
        }
    }

    /**
     * Methode um den Quicksort Algorithmus in Gang zu setzen
     */
    public void quickSort()
    {
        // Aufruf der rekursiven Methode sortieren
        sortieren(Array, 0, Array.length-1);
    }

    /**
     * Rekursive Methode zum Sortieren von Arrays
     *
     * @param  Array[]  zu sortierendes Array
     * @param links     linke Stelle des zu sortierenden Raumes des Arrays
     * @param rechts    rechte Stelle des zu sortierenden Raumes des Arrays
     *
     * @return          Array, in dessen linker Hälfte alle Objekte kleiner sind als das "Mittelobjekt" und auf der rechten Seite größer
     */
    private static int[] sortieren(int Array[], int links, int rechts)
    {
     
        // Bedingung prüfen, ob die Stelle links vor rechts ist, ansonsten wird Array wie gehabt zurückgegeben (Abbruchbedingung für die Rekursive Funktion + Überprüfung Zahlendreher/... des Anwenders
        if(links < rechts)
        {
            //Erster Teildurchgang und die Position von dem "Mittelobjekt" wird gespeichert
            int teiler = teile(Array, links, rechts);
            // Funktion wird nochmal durchgegangen
            sortieren(Array, links, teiler);
            // Durchgang für die rechte Seite des Arrays
            sortieren(Array, teiler+1, rechts);
        }
        // Arrayhälfte, bei links alles kleiner ist als das "Mittelobjekt" und rechts alles größer ist, beim finalen Durchgang sortiertes Array
        return Array;
    }

    /**
     * Rekursive Methode zum Sortieren von Arrays
     *
     * @param  Array[]  zu sortierendes Array
     * @param links     linke Stelle des zu sortierenden Raumes des Arrays
     * @param rechts    rechte Stelle des zu sortierenden Raumes des Arrays
     *
     * @return          Position des "Mittelobjektes" oder "Schwenkobjektes" des Arrays
     */
    private static int teile(int Array[], int links, int rechts)
    {
        // Hilfsvariablen erstellen
        int pivot = Array[rechts];  // "Mittelobjekt", welches zur Teilung des Arrays benutzt wird( Links neben ihm kleinere Zahlen, rechts größere)                  
        int i     = links;
        int j     = rechts-1;
        while(i < j) {
            /* // prüfen, an welcher Stelle Zahl ist, für die Bedingung ( Zahl muss kleiner sein als "Mittelobjekt" und innerhalb des Arrays sein( Damit nicht Arrayoutofbounds auftritt))  nicht zutrifft
            for( i = i; Array[i] < pivot && i < rechts-1; i++)
            {
            }
            // prüfen, an welcher Stelle Zahl ist, für die Bediungung ( Zahl muss größer sein als "Mittelobjekt" und innerhalb des Arrays sein( Damit nicht Arrayoutofbounds auftritt))  nicht zutrifft
            for( j = j; Array[j] >= pivot && j > links; j--)
            {
            }*/                                                                                                               // Diese Abfrage funktioniert, ist aber langsam
            // prüfen ob i und j auf der richtigen Seite sind (links: kleiner als pivot, rechts: größer als pivot)
            if(i < j){
                // Werte an Stellen i und j tauschen
                int tauschen = Array[i];
                Array[i] = Array[j];
                Array[j] = tauschen;
                j--;    // Übernimmt das runterzählen von der for Schleife
            }
            else
            {
                i++; // Übernimmt das hochzählen von der for Schleife
            }
        }
        // Da der Pivotwert immer noch ganz rechts ist, prüfen, auf welcher Seite dieser stehen muss (links/rechts)
        if(Array[i] > pivot){
            // Werte an Stellen i und rechts tauschen
            int tauschen      = Array[i];
            Array[i]      = Array[rechts];
            Array[rechts] = tauschen;
        }
        // gibt Position von Pivot zurück, damit dieses nochmal als Teiler verwendet werden kann (Oder halt die Zahl danach)
        return i;
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Quicksort Laufzeit langsam Java Basics - Anfänger-Themen 5
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
I Java Quicksort PAP Java Basics - Anfänger-Themen 2
B Quicksort in Verbindung mit einem Projekt Java Basics - Anfänger-Themen 1
M QuickSort und Liste Java Basics - Anfänger-Themen 6
G Quicksort Algorithmus Java Basics - Anfänger-Themen 12
Hanschyo Quicksort sortiert von groß nach klein Java Basics - Anfänger-Themen 3
R Quicksort mit Interface Comparable Java Basics - Anfänger-Themen 6
L Quicksort verstehen Java Basics - Anfänger-Themen 3
J Quicksort mit Stack Java Basics - Anfänger-Themen 4
Liondary Quicksort Java Basics - Anfänger-Themen 20
K Quicksort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
S Quicksort Algorithmus Java Basics - Anfänger-Themen 2
D Java Quicksort Java Basics - Anfänger-Themen 5
A Frage zu QuickSort Java Basics - Anfänger-Themen 9
B Quicksort mit Durchschnitt als Pivot Java Basics - Anfänger-Themen 1
K Quicksort Java Basics - Anfänger-Themen 3
M Quicksort - Probleme Java Basics - Anfänger-Themen 5
T QuickSort implementieren Java Basics - Anfänger-Themen 5
R QuickSort Verständis Problem (?) Java Basics - Anfänger-Themen 2
M Quicksort implementierung Java Basics - Anfänger-Themen 23
E Quicksort Java Basics - Anfänger-Themen 8
Xendarii Quicksort gibt kein Ergebnis aus Java Basics - Anfänger-Themen 13
E QuickSort: Ergebniss speichern Java Basics - Anfänger-Themen 2
P quickSort eines Objekt-Arrays geht nicht! Java Basics - Anfänger-Themen 11
F Stackoverflow bei Quicksort Java Basics - Anfänger-Themen 2
F Quicksort Java Basics - Anfänger-Themen 22
C Quicksort Invariante Java Basics - Anfänger-Themen 2
C QuickSort - Pivot in der Mitte Java Basics - Anfänger-Themen 5
P QuickSort iterativ Java Basics - Anfänger-Themen 5
K Eine Frage zum Quicksort Java Basics - Anfänger-Themen 11
B Quicksort --> Methodenaufruf Java Basics - Anfänger-Themen 10
B QuickSort - Fehler nicht zu finden Java Basics - Anfänger-Themen 2
W Quicksort Problem Java Basics - Anfänger-Themen 3
A Quicksort, #Vergleiche zählen klappt nicht Java Basics - Anfänger-Themen 3
J Quicksort Implementierung-- Exception ArrayOutOfBounds Java Basics - Anfänger-Themen 6
M Fehler in meinem Quicksort! Java Basics - Anfänger-Themen 21
B Quicksort Struktogramm Java Basics - Anfänger-Themen 9
G Frage zu Quicksort Java Basics - Anfänger-Themen 18
0 Quicksort bsp Java Basics - Anfänger-Themen 5
B Quicksort Problem Java Basics - Anfänger-Themen 6
S Mein Quicksort Problem: he method quickSort(int[], int, int) Java Basics - Anfänger-Themen 2
M Quicksort Java Basics - Anfänger-Themen 2
C Quicksort raten Java Basics - Anfänger-Themen 2
K ArrayList sortieren mit Quicksort Java Basics - Anfänger-Themen 3
M Quicksort Java Basics - Anfänger-Themen 4
J Quicksort programmieren Probleme Java Basics - Anfänger-Themen 9
S Quicksort Programm Java Basics - Anfänger-Themen 7
D Quicksort Java Basics - Anfänger-Themen 3
K Parameterübergabe bei quickSort Java Basics - Anfänger-Themen 6
S QuickSort will mir nicht in den Kopf (an einer Stelle) Java Basics - Anfänger-Themen 14
0 Quicksort Java Basics - Anfänger-Themen 2
M QuickSort Java Basics - Anfänger-Themen 4
J QuickSort - kurze Frage Java Basics - Anfänger-Themen 9
H Quicksort und Rekursiv: Türme von Hanoi Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
E Alter (Laufzeit) berechnen Java Basics - Anfänger-Themen 11
W Array zur Laufzeit bearbeiten? Java Basics - Anfänger-Themen 31
D Objekterzeugungen mit zur Laufzeit variierenden Attributen Java Basics - Anfänger-Themen 7
J GroupLayout zur Laufzeit erweitern Java Basics - Anfänger-Themen 1
B Übersetzungszeit und Laufzeit Java Basics - Anfänger-Themen 3
amgadalghabra Die vier Sortieralgorithmen die durchschnittliche Laufzeit in Millisekunden Java Basics - Anfänger-Themen 37
U Dijkstra Algorithmus Laufzeit Java Basics - Anfänger-Themen 3
L Anzahl der Elemente key in einem Array mit log(N) Laufzeit Java Basics - Anfänger-Themen 4
S Interpreter-Fehler Endlosschleife zur Laufzeit aber warum? Java Basics - Anfänger-Themen 15
J JavaFX Label,Button zur Laufzeit Java Basics - Anfänger-Themen 30
H Laufzeit Java Basics - Anfänger-Themen 11
C Laufzeit eines Sortier-Algorithmus ermitteln Java Basics - Anfänger-Themen 4
L Objekt Typ zur Laufzeit ermitteln Java Basics - Anfänger-Themen 1
J Datei im Package zur Laufzeit editieren Java Basics - Anfänger-Themen 1
R Objekte zur Laufzeit in Schleife erzeugen und in ArrayList ablegen Java Basics - Anfänger-Themen 4
C Laufzeit von Stack Operation Java Basics - Anfänger-Themen 5
D Laufzeit von einfachem Programm Java Basics - Anfänger-Themen 21
J Laufzeit berechnen/Laufzeitanalyse Java Basics - Anfänger-Themen 2
M Input/Output Datei in Laufzeit-JAR kopieren Java Basics - Anfänger-Themen 6
V Laufzeit Java Basics - Anfänger-Themen 23
G Laufzeit/ O/Θ-Notation einer Treeset Methode Java Basics - Anfänger-Themen 0
W Klassen [GELÖST] Objekte während der Laufzeit mit neuen veränderten Werten beliebig oft initialisieren Java Basics - Anfänger-Themen 2
M Erste Schritte Code zur Laufzeit ändern lassen Java Basics - Anfänger-Themen 3
C Klassen aus einem Package ermitteln und per Laufzeit laden Java Basics - Anfänger-Themen 17
J Objekte zur Laufzeit erzeugen und direkt verwenden Java Basics - Anfänger-Themen 9
M Möglich? Methode aufrufen deren Bezeichner zur Laufzeit durch einen überg. String festgelegt wird Java Basics - Anfänger-Themen 3
K JLabel zur Laufzeit dynamisch erzeugen Java Basics - Anfänger-Themen 7
M Methoden miteinander verbinden (Laufzeit) Java Basics - Anfänger-Themen 6
llabusch Interface Layout eines Labels während der Laufzeit ändern Java Basics - Anfänger-Themen 0
Streeber reale Laufzeit meines Programms ausgeben Java Basics - Anfänger-Themen 1
D Algorithmus zu gegebener Laufzeit implementieren Java Basics - Anfänger-Themen 1
R Variablen Datentyp erst während Laufzeit festlegen Java Basics - Anfänger-Themen 6
S Klassentyp zur Laufzeit ändern? Java Basics - Anfänger-Themen 3
M Laufzeit und O-Notation Java Basics - Anfänger-Themen 3
M Variablen Variable zur Laufzeit erzeugen Java Basics - Anfänger-Themen 3
A Laufzeit von verschachtelter for-Schleife Java Basics - Anfänger-Themen 4
B Variablen Instanz von Enum zur Laufzeit erstellen und zuweisen Java Basics - Anfänger-Themen 2
L Panels zur Laufzeit ändern Java Basics - Anfänger-Themen 2
A Laufzeit Java Basics - Anfänger-Themen 11
M Methodennamen zur Laufzeit ausgeben Java Basics - Anfänger-Themen 5
F JTable zur laufzeit füllen Java Basics - Anfänger-Themen 7
P GUI - Layout per Laufzeit erstellen/verändern? Java Basics - Anfänger-Themen 6
N Variablen VariableNamen auswirkung auf Laufzeit Java Basics - Anfänger-Themen 3
R Rekursionsformel für Laufzeit von Algorithmus Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben