Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren

UnknownInnocent

UnknownInnocent

Bekanntes Mitglied
Hallo, ich will für die Schule den Merge-Sort-Algorithmus in Java visualisieren. Dafür habe ich folgenden Code:
Java:
private int[] data = {10,20,30,40,90,120,100,140,70,50,80,110};
    
     public int[] sort(int l, int r) {
            
        if (l < r) {
            int q = (l + r) / 2;
            sort(l, q);
            sort(q + 1, r);
            merge(l, q, r);
        }
        panel.setData(data);
        return data;
    }

    private void merge(int l, int q, int r) {
        int[] arr = new int[data.length];
        int i, j;
        for (i = l; i <= q; i++) {
            arr[i] = data[i];
        }
        for (j = q + 1; j <= r; j++) {
            arr[r + q + 1 - j] = data[j];
        }
        i = l;
        j = r;
        for (int k = l; k <= r; k++) {
            if (arr[i] <= arr[j]) {
                data[k] = arr[i];
                i++;
            } else {
                data[k] = arr[j];
                j--;
            }
        }
    }

Das funktioniert auch einwandfrei, allerdings ist es für eine Visualisierung zu schnell. Ich nutze Balken für die Darstellung die am Ende der Länge nach sortiert sein sollen. Auch das geht, allerdings so schnell, dass man nur das Endergebnis sieht und nicht die einzelnen Veränderungen, Wie würde ich das so ändern, dass das System nach jedem Schritt so lange pausiert, so dass man die Veränderungen sehen kann?
 
mihe7

mihe7

Top Contributor
Java:
import java.awt.BorderLayout;
import java.util.*;
import javax.swing.*;

public class MergeSort {

    class SorterThread extends Thread {

        public void run() {
            int[] sorted = sort(0, data.length-1);

            SwingUtilities.invokeLater(() -> update(-1,-1));
        }

        public int[] sort(int l, int r) {
            
            if (l < r) {
                int q = (l + r) / 2;
                sort(l, q);
                sort(q+1, r);
                merge(l, q, r);
                synchronized(data) {
                    try {
                        SwingUtilities.invokeLater(() ->update(l, r));
                        data.wait();
                    } catch (InterruptedException ex) {}
                }
            }
            return data;
        }

        private void merge(int l, int q, int r) {
            int[] arr = new int[data.length];
            int i, j;
            for (i = l; i <= q; i++) {
                arr[i] = data[i];
            }
            for (j = q + 1; j <= r; j++) {
                arr[r + q + 1 - j] = data[j];
            }
            i = l;
            j = r;
            for (int k = l; k <= r; k++) {
                if (arr[i] <= arr[j]) {
                    data[k] = arr[i];
                    i++;
                } else {
                    data[k] = arr[j];
                    j--;
                }
            }
        }
    }

    private int[] data = {100,80,50,40,90,120,140,30,20,60,10};
    
    private JLabel label = new JLabel();
    private JButton step = new JButton("Weiter");

    private void update(int left, int right) {
        synchronized(data) {
            StringBuilder b = new StringBuilder(Arrays.toString(data));
            if (left != -1 && right != -1) {
                b.append(" [" + left + ", " + right + "]");
                step.setEnabled(true);
            } else {
                b.append(" - FERTIG");
            }
            label.setText(b.toString());
        }
    }


    public void run() {
        step.addActionListener(e -> {
            synchronized(data) {
                step.setEnabled(false);
                data.notify();
            }
        });

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(label);
        frame.add(step, BorderLayout.SOUTH); 
        frame.setSize(600, 200);
        frame.setVisible(true);

        new SorterThread().start();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new MergeSort().run());
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Frage nach I/O Algorithmus Java Basics - Anfänger-Themen 2
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
U Meinung zum Dijkstra Algorithmus Java Basics - Anfänger-Themen 6
U Dijkstra Algorithmus Laufzeit Java Basics - Anfänger-Themen 3
L Math.exp also eigenen Algorithmus Java Basics - Anfänger-Themen 2
Kirby_Sike Algorithmus entwickeln Java Basics - Anfänger-Themen 37
M Algorithmus Max-Heap? Java Basics - Anfänger-Themen 3
I Labyrinth auf der Basis eines rekursiven Algorithmus Java Basics - Anfänger-Themen 27
A Algorithmus effizienter machen Java Basics - Anfänger-Themen 1
V Algorithmus zur fortlaufenden Berechnung des duechscjnt Java Basics - Anfänger-Themen 1
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
O Labyrinth Algorithmus Java Basics - Anfänger-Themen 3
G Quicksort Algorithmus Java Basics - Anfänger-Themen 12
S Binäre-Suche Algorithmus Java Basics - Anfänger-Themen 1
D Algorithmus in Pseudocode mit log2(n) Operationen erstellen Java Basics - Anfänger-Themen 3
C Laufzeit eines Sortier-Algorithmus ermitteln Java Basics - Anfänger-Themen 4
H aufgabe java luhn algorithmus Java Basics - Anfänger-Themen 10
A Datenstruktur für Savings Algorithmus und Planung von kleinen Programmierprojekten Java Basics - Anfänger-Themen 1
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
S Dijkstra Algorithmus funktioniert nicht Java Basics - Anfänger-Themen 4
N Denksportaufgabe durch Algorithmus lösen Java Basics - Anfänger-Themen 2
S Problem mit einem rekursivem FloodFill Algorithmus Java Basics - Anfänger-Themen 62
B Algorithmus Square und Multiply Java Basics - Anfänger-Themen 3
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
D Frage Boyer-Moore Algorithmus Java Basics - Anfänger-Themen 7
M Komplexität Algorithmus Java Basics - Anfänger-Themen 8
H Zeichen im algorithmus Java Basics - Anfänger-Themen 4
B Code Verständnisfragen - FLoyd Warshall Algorithmus Java Basics - Anfänger-Themen 1
B Algorithmus zum entmischen einer Zahlenfolge Java Basics - Anfänger-Themen 15
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
T Algorithmus zur Überprüfung eines binären Suchbaums Java Basics - Anfänger-Themen 2
K Best Practice Algorithmus für Berechnung von Zahlenreihenfolge Java Basics - Anfänger-Themen 12
M Simpler Algorithmus läuft extrem langsam. Java Basics - Anfänger-Themen 3
K Erste Schritte Brute Force Algorithmus Java Basics - Anfänger-Themen 2
L Frage zu BubbleSort Algorithmus Java Basics - Anfänger-Themen 2
B gibt es ein Stundenplan-Algorithmus? Java Basics - Anfänger-Themen 11
O Algorithmus-Problem Java Basics - Anfänger-Themen 5
P Euklidischer Algorithmus Java Basics - Anfänger-Themen 9
L Greates Commong Dividend - euklidischer Algorithmus, modulos not positive Java Basics - Anfänger-Themen 5
J Euklidischer Algorithmus Java Basics - Anfänger-Themen 1
S Quicksort Algorithmus Java Basics - Anfänger-Themen 2
S GraphNode --- Dijkstra Algorithmus : NullPointerException Java Basics - Anfänger-Themen 1
B Rekursive Algorithmus schreiben Java Basics - Anfänger-Themen 8
V Algorithmus in einer Methode ausführen Java Basics - Anfänger-Themen 3
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
M Dijkstras Algorithmus Java Basics - Anfänger-Themen 5
S Zusammenhang Datenstruktur/Algorithmus Java Basics - Anfänger-Themen 1
M Simulation - Algorithmus Java Basics - Anfänger-Themen 3
F Erste Schritte Hilfe beim Algorithmus finden Java Basics - Anfänger-Themen 6
D Algorithmus für Punkte auf einem Kreis Java Basics - Anfänger-Themen 0
D Algorithmus zu gegebener Laufzeit implementieren Java Basics - Anfänger-Themen 1
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
C Ideen für einen Algorithmus Java Basics - Anfänger-Themen 1
F Best Practice Algorithmus optimieren - Binaeruhr Java Basics - Anfänger-Themen 2
S Euklid Algorithmus zur Berechnung des GGTs Java Basics - Anfänger-Themen 2
L Welcher Algorithmus ist das ? Java Basics - Anfänger-Themen 9
J Rekursiver Horner-Schema-Algorithmus - Verstehe ich ihn richtig? Java Basics - Anfänger-Themen 2
O Java Zufalls-Verteil-Algorithmus Java Basics - Anfänger-Themen 3
P ganz simpler algorithmus Java Basics - Anfänger-Themen 3
C Sortieren ohne Algorithmus Java Basics - Anfänger-Themen 8
J Algorithmus: Grad von floating zu Grad/Minute/Sekunde Java Basics - Anfänger-Themen 3
A Text Verschriebung/Algorithmus(?) Java Basics - Anfänger-Themen 8
R Rekursionsformel für Laufzeit von Algorithmus Java Basics - Anfänger-Themen 3
E Algorithmus für kart. Produkt: als int [] Feld repräsentiert Java Basics - Anfänger-Themen 10
U Peterson Algorithmus Java Basics - Anfänger-Themen 13
algebraiker Collections Bräuchte Hilfe bei dem Algorithmus - LinkedHashMap Java Basics - Anfänger-Themen 2
S A* Path Algorithmus in Java schon vorhanden Java Basics - Anfänger-Themen 3
S Bubble Sort Algorithmus Java Basics - Anfänger-Themen 3
N Unerklärlich: Rekursiver Algorithmus gibt falschen Datentyp zurück... Java Basics - Anfänger-Themen 4
S Algorithmus (Programmablaufplan) Java Basics - Anfänger-Themen 11
S Algorithmus für Spielbaum Java Basics - Anfänger-Themen 5
A double and add algorithmus für elliptische kurven/ integer binär darstellen Java Basics - Anfänger-Themen 14
H Algorithmus von Hierholzer Java Basics - Anfänger-Themen 3
Binary.Coder Welcher Datentyp für den Simplex Algorithmus Java Basics - Anfänger-Themen 3
N Huffman algorithmus Java Basics - Anfänger-Themen 35
JavaKaffee Minimax-Algorithmus Verständnis Java Basics - Anfänger-Themen 12
B Lee-Algorithmus Java Basics - Anfänger-Themen 2
J Logarithmus Algorithmus Java Basics - Anfänger-Themen 12
H Algorithmus in JAVA schreiben Java Basics - Anfänger-Themen 13
M Korrektheit eines Algorithmus prüfen? Java Basics - Anfänger-Themen 2
M Algorithmus der die Zahlen 0-10 ausgibt Java Basics - Anfänger-Themen 18
T PriorityQueue im dijkstra Algorithmus implementieren Java Basics - Anfänger-Themen 4
J geschickter Algorithmus um die 'Umgebung' einer stelle eines Arrays zu durchsuchen Java Basics - Anfänger-Themen 7
J Algorithmus zum umwandeln einer zahl in 8bit kodierung. Java Basics - Anfänger-Themen 11
N Algorithmus für Berechnung einer Quersumme Java Basics - Anfänger-Themen 9
B Bubblesort-Algorithmus und Testklasse Java Basics - Anfänger-Themen 5
Q frage zu Algorithmus Java Basics - Anfänger-Themen 3
M Spielplan Algorithmus Java Basics - Anfänger-Themen 23
F Rekursiver Algorithmus Java Basics - Anfänger-Themen 5
T Greedy-Algorithmus Java Basics - Anfänger-Themen 7
G algorithmus zum finden der größten zahl von vieren Java Basics - Anfänger-Themen 6
T Selection-Sort-Algorithmus Java Basics - Anfänger-Themen 9
N Algorithmus?? Java Basics - Anfänger-Themen 5
A Laufzeitberechnung von Algorithmus Java Basics - Anfänger-Themen 4
W Algorithmus für Primzahlberechnung Java Basics - Anfänger-Themen 4
D Algorithmus, beliebige Anzahl doubles kombinieren Java Basics - Anfänger-Themen 7
S Einstiegerfrage: Algorithmus Java Basics - Anfänger-Themen 14
0 Simplen Algorithmus optimieren Java Basics - Anfänger-Themen 10
X Java Algorithmus Frage Java Basics - Anfänger-Themen 17
E Kombinations Algorithmus Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Anzeige

Neue Themen


Oben