import java.awt.*; //Import für AWT-Elemente
import java.awt.event.*; //Import für Events der AWT-Elemente
import java.awt.image.*;
//import java.SortAlgoritm.*;
//--------------------------------------------------------------------------------------------------------------------
public class VisuSort extends Frame {
//-----------------------------------------------------------------------------
//Buttons
Button bQuick = new Button("Quciksort"); //Quicksort Button erstellen
Button bBubble= new Button("Bubblesort"); //Bubblesort Button erstellen
Button bMerg = new Button("Mergsort"); //Mergsort Button erstellen
Button bMin = new Button("Minsort"); //Minsort Button erstellen
Button zufallsButton = new Button("Zufallszahlen- und Diagrammerstellung"); //Zufallszahlen Button erstellen
Button bAlle = new Button("Alle sortieren"); //bAlle Button erstellen
//Label
Label lUeberschrift = new Label("Visualisierung von Sortierverfahren"); //Überschrift Label erstellen
Label zufallsZ = new Label(" Hier kommmen die Zufallszahlen hin"); //Zufallszahlenpool Label erstellen
//-----------------------------------------------------------------------------
//Festlegung der Abstände
int länge = 700/7; //Abstand zur Seite
int höhe = 700/7; //Abstand zur Decke
//Festlegung der Höhe und Breite der Buttons
int bhoe = 20; //Höhe der Buttons
int bbrei = 100; //Breite der Buttons
//Festlegung von Sonstigem
public int x[]= new int[500]; //Variable für Random
//-----------------------------------------------------------------------------
//Schriftarteinstellung
Font lUeberschriftfont = new Font("Serif", Font.BOLD, 28); //Überschrift Schriftart
Font bQBMM = new Font("Dialog", Font.BOLD, 12); //Quicksort etc Schriftart
Font zufallB = new Font("DialogInput", Font.BOLD, 12); //Zufallszahlenlabel Schriftart
//---------------------------------------------------------------------------------------------------------------------
public static void main(String[] args) {
VisuSort viso = new VisuSort(); //Konstruktoraufruf
}
//-----------------------------------------------------------------------------
public VisuSort(){
super("VisuSort"); //Fenstername
setSize(700,700); //Fenstergröße
setLocation(150,25); //"Startpunkt" des Programms
setLayout(null); //Layoutart
setVisible(true); //Fenster sichtbar machen
setResizable(false); //Fenstergröße kann nicht verändert werden!!!
//-----------------------------------------------------------------------------
addWindowListener(new WindowAdapter() { //Window
public void windowClosing(WindowEvent event){ //Closing
System.exit(0); //Adapter
} //
}); //
//-----------------------------------------------------------------------------
//Labels bounden
lUeberschrift.setBounds(länge+20,höhe/4,500,60); //Überschrift Label bounden
zufallsZ.setBounds(länge/5,höhe+560,600,40); //Zufallszahlen Label bounden
//Bounden der Buttons
bQuick.setBounds(länge/4,höhe+200,bbrei,bhoe); //Quicksort Button bounden
bBubble.setBounds(länge+475,höhe+200,bbrei,bhoe); //Bubblesort Button bounden
bMerg.setBounds(länge/4,höhe+500,bbrei,bhoe); //Mergsort Button bounden
bMin.setBounds(länge+475,höhe+500,bbrei,bhoe); //Minsort Button bounden
zufallsButton.setBounds(länge/4,höhe+535,bbrei+165,bhoe); //Zufallszahlen Button bounden
bAlle.setBounds(länge/4*12,höhe+240,bbrei,bhoe); //Alle_sortieren Button bounden
//-----------------------------------------------------------------------------
//Schriftartverteilung
lUeberschrift.setFont(lUeberschriftfont); //Überschrift Schirftart
zufallsZ.setFont(zufallB); //Zufallszahlenpool Schriftart
bQuick.setFont(bQBMM); //Den Buttons
bBubble.setFont(bQBMM); //Die Schriftarten
bMerg.setFont(bQBMM); //zuweisen
bMin.setFont(bQBMM); //
zufallsButton.setFont(bQBMM); //
bAlle.setFont(bQBMM); //
//-----------------------------------------------------------------------------
//Alles einfügen
add(bQuick); //Quicksort Button einfügen
add(bBubble); //Bubblesort Button einfügen
add(bMerg); //Mergsort Button einfügen
add(bMin); //Minsort Button einfügen
add(zufallsButton); //Zufallszahlen Button einfügen
add(bAlle); //Alle_sortieren Button einfügen
add(lUeberschrift); //Überschrift Label einfügen
add(zufallsZ); //Zufallszahlen Label einfügen
//--------------------------------------------------------------------------------
zufallsButton.addActionListener(new ZufallsButtonListener());
bQuick.addActionListener(new BQuickButtonListener());
bBubble.addActionListener(new BBubbleButtonListener());
bMerg.addActionListener(new BMergButtonListener());
bMin.addActionListener(new BMinButtonListener());
bAlle.addActionListener(new BAlleButtonListener());
}
public void paint(Graphics g) {
g.setColor(Color.black); //Darunter liegende zu zeichnende Objekte werden schwarz
g.drawLine(350,0,350,700); //Vertikale Linie
g.drawLine(0,350,700,350); //Horizontale Linie
}
//---------------------------------------------------------------------------------------------------------------------
//Button---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
//Buttoneinstellungen für die Zufallszahlengenerierung im Label zufallsZ und die Erstellung der Diagramme
class ZufallsButtonListener implements ActionListener { //Dem Button zufallsButton wird ein Actionlistener hinzugefügt
public void actionPerformed(ActionEvent e){
//quickSort(x);
Graphics g = getGraphics(); //Nötig, damit durch den Button gezeichnet wird
String abc =""; //Erzeugt das Arry abc
for (int i=0; i<15; i++) { //Forschleife für die Anzahl der Zufallszahlen
x[i] = (int)(Math.random() * 100+1); //Speichert die Zufallszahlen in x[i]
System.out.println(x[i]); //Ausgabe der Zufallszahlen in der Konsole
abc += " | " + x[i]; //Hängt die Werte von x an tmp dran
}
zufallsZ.setText(abc); //Ausgabe der Zufallszahlen im Label zuffallsZ
//-----------------------------------------------------------------------------
//Hintergrund für ALLE Diagramme
g.setColor(Color.white); //Darunter liegende zu zeichnende Objekte werden weis
g.fillRect(0,0, 700,700); //Malt Hintergrund für Diagramm
//Aufteilungskreuz
g.setColor(Color.black); //Darunter liegende zu zeichnende Objekte werden schwarz
g.drawLine(350,0,350,700); //Vertikale Linie
g.drawLine(0,350,700,350); //Horizontale Linie
int balkenAbstand1 = 15; //Festlegung des Abstandes zwischen den Diagrammbalken
int height1 =20; //Höhenfaktor für die Balken
int xPosStart1 = 15; //Anfang auf der X-Achse des Ersten Diagrammbalkens
int yPosStart1 =290; //Anfang auf der Y-Achse des Ersten Diagrammbalkens
//Quicksort Diagramm
g.setColor(Color.red); //Darunter liegende zu zeichnende Objekte werden rot
for(int i=0; i<15; i++)
{
xPosStart1 += balkenAbstand1; //Abstand der Balken
g.fill3DRect(xPosStart1, yPosStart1 - height1 * x[i]/10, 10, height1 * x[i]/10, true);
}
//-----------------------------------------------------------------------------
int balkenAbstand2 = 15; //Festlegung des Abstandes zwischen den Diagrammbalken
int height2 =20; //Höhenfaktor für die Balken
int xPosStart2 = 440; //Anfang auf der X-Achse des Ersten Diagrammbalkens
int yPosStart2 =290; //Anfang auf der Y-Achse des Ersten Diagrammbalkens
//Bubblesort Diagramm
g.setColor(Color.yellow); //Darunter liegende zu zeichnende Objekte werden gelb
for(int i=0; i<15; i++)
{
xPosStart2 += balkenAbstand2;
g.fill3DRect(xPosStart2, yPosStart2 - height2 * x[i]/10, 10, height2 * x[i]/10, true);
}
//-----------------------------------------------------------------------------
int balkenAbstand3 = 15; //Festlegung des Abstandes zwischen den Diagrammbalken
int height3 =20; //Höhenfaktor für die Balken
int xPosStart3 = 15; //Anfang auf der X-Achse des Ersten Diagrammbalkens
int yPosStart3 =595; //Anfang auf der Y-Achse des Ersten Diagrammbalkens
//Mergsort Diagramm
g.setColor(Color.green); //Darunter liegende zu zeichnende Objekte werden grün
for(int i=0; i<15; i++)
{
xPosStart3 += balkenAbstand3;
g.fill3DRect(xPosStart3, yPosStart3 - height3 * x[i]/10, 10, height3 * x[i]/10, true);
}
//-----------------------------------------------------------------------------
int balkenAbstand4 = 15; //Festlegung des Abstandes zwischen den Diagrammbalken
int height4 =20; //Höhenfaktor für die Balken
int xPosStart4 = 440; //Anfang auf der X-Achse des Ersten Diagrammbalkens
int yPosStart4 =595; //Anfang auf der Y-Achse des Ersten Diagrammbalkens
//Minsort Diagramm
g.setColor(Color.blue); //Darunter liegende zu zeichnende Objekte werden blau
for(int i=0; i<15; i++)
{
xPosStart4 += balkenAbstand4;
g.fill3DRect(xPosStart4, yPosStart4 - height4 * x[i]/10, 10, height4 * x[i]/10, true);
}
}//ActionPerformed von Zufallszahlen- und Diagrammerstellung ENDE
}//ActionListener von Zufallszahlen- und Diagrammerstellung ENDE
//---------------------------------------------------------------------------------------------------------------------
//Button---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
class BQuickButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e){
quickSort(x); //Aufruf von Quicksort (Quicksortdefinierung fängt weiter unten an)
}//ActionPerformed von Quicksort ENDE
}//ActionListener von Quicksort ENDE
public void vergleicheDraw(int[] Array, int vergleiche1, int vergleiche2, int pivot, int linkeSeite, int rechteSeite)
{
vergleiche(Array, vergleiche1, vergleiche2);
// Animiert zeichnen, dabei Buffer verwenden
//BufferedImage newGraph = BufferedImage((Graphics2D)getGraphics()).getDeviceConfiguration().createCompatibleImage(
//getBalkenAbstand1(), getBalkenHöhe1(), Transparency.TRANSLUCENT);
//
//Graphics g = newGraph.getGraphics();
Graphics g = getGraphics();
//g.setColor(Color.orange);
//g.fillRect(0,0, 350,350);
g.clearRect(0,0,350,350);
int balkenAbstand1 = 15;
int balkenHöhe1 =20;
int xPosStart1 = 15;
int yPosStart1 =290;
for(int i=0; i<15; i++)
{
if(i != pivot)
g.setColor(Color.red);
else
g.setColor(Color.yellow);
if(i == vergleiche1 || i == vergleiche2)
g.setColor(g.getColor().brighter().brighter().brighter());
xPosStart1 += balkenAbstand1;
g.fill3DRect(xPosStart1, yPosStart1 - balkenHöhe1 * x[i]/10, 10, balkenHöhe1 * x[i]/10, true);
g.setColor(Color.black);
if(i == linkeSeite)
g.fillRect(xPosStart1, yPosStart1 - balkenHöhe1 * x[i]/10,5, balkenHöhe1 * x[i]/10);
else if(i == rechteSeite)
g.fillRect(xPosStart1+7 /*+ 10 - 3*/, yPosStart1 - balkenHöhe1 * x[i]/10, 5, balkenHöhe1 * x[i]/10);
}
//getGraphics().drawImage(newGraph,0, 0, this);
try { Thread.sleep(500); } catch(Exception e) { }
}
// Wichtige Funktionen für Quicksort
private void vergleiche(int[] Array, int i, int j)
{
int abc = Array[i];
Array[i] = Array[j];
Array[j] = abc;
}
// Ab hier das eigentliche Quicksort
//**** Quicksort-Algorithmus *************************************
public void quickSort(int[] Array)
{
quickSort(Array, 0, Array.length -1 );
}
private void quickSort(int[] Array, int links, int rechts)
{
if(rechts > links)
{
int index = links + (int)((rechts - links)/ 2);
int pivot = Array[index]; //Pivot = ein Element nehmen
//vergleiche(Array, index, rechts)
vergleicheDraw(Array, index, rechts, index, links, rechts);
index = links;
for(int i = index; i < rechts; ++i)
{
if(Array[i] < pivot)
//vergleiche(Array, index++, i)
vergleicheDraw(Array, index++, i, index, links, rechts);
}
//vergleiche(Array, index, rechts)
vergleicheDraw(Array, index, rechts, index, links, rechts);
quickSort(Array, links, index);
quickSort(Array, index + 1, rechts);
}
}
//---------------------------------------------------------------------------------------------------------------------
//Button---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
class BBubbleButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e){
}//ActionPerformed von Bubblesort ENDE
}//ActionListener von Bubblesort ENDE
//---------------------------------------------------------------------------------------------------------------------
//Button---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
class BMergButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e){
}//ActionPerformed von Mergsort ENDE
}//ActionListener von Mergsort ENDE
//---------------------------------------------------------------------------------------------------------------------
//Button---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
class BMinButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e){
}//ActionPerformed von Minsort ENDE
}//ActionListener von Minsort ENDE
//---------------------------------------------------------------------------------------------------------------------
//Button---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
class BAlleButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e){
}//ActionPerformed von Alle_sortieren ENDE
}//ActionListener von Alle_sortieren ENDE
//---------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
}//Alles zu