Hallo,
ich habe folgenden Code für Merge-Sort:
Das ganze stelle ich jetzt grafisch, mit Balken, dar, würde aber gerne noch ein 2. Fenster hinzufügen, in dem Schrittweise ein Baumdiagramm zum Ablauf erstellt wird. Das würde ja ungefähr so aussehen:
Mein Hauptproblem ist jetzt, dass ich nicht weiß, wie ich die Informationen, die ich dafür brauche erfasse und wie ich sie am besten speichere (Array, ArrayList, ... ?)
ich habe folgenden Code für Merge-Sort:
Java:
public class algorithm{
private Panel panel;
public algorithm(Panel panel) {
this.panel = panel;
}
class SorterThread extends Thread {
public void run() {
sort(0, data.length-1);
panel.setDefault();
}
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);
}
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--;
}
try {
current = k;
left = l;
right = r;
SwingUtilities.invokeLater(() ->update());
while(pause) Thread.sleep(50);
Thread.sleep(speed);
} catch (InterruptedException ex) {}
}
}
}
private int[] data = {123, 174, 79, 191, 72, 118, 94, 142, 173, 163};
private int speed = 100;
private int current = -1, left, right;
private boolean pause = false;
private void update() {
synchronized(data) {
panel.setData(data, current, left, right);
}
}
public void run() {
new SorterThread().start();
}
public int[] getData() {
return data;
}
}
Das ganze stelle ich jetzt grafisch, mit Balken, dar, würde aber gerne noch ein 2. Fenster hinzufügen, in dem Schrittweise ein Baumdiagramm zum Ablauf erstellt wird. Das würde ja ungefähr so aussehen:
Mein Hauptproblem ist jetzt, dass ich nicht weiß, wie ich die Informationen, die ich dafür brauche erfasse und wie ich sie am besten speichere (Array, ArrayList, ... ?)