====== Sortierverfahren ======
Ich habe das ganze in eine grafische Oberfläche gesteckt und die Fenster, in denen sortiert wird, durch eine Klasse ''SortierSortierFrame'' realisiert. Darin werden auch die Zufallszahlen erstellt und an die einzelnen Sortierverfahren weitergegeben.
Die Klassen für die Sortierverfahren werden als Nachkommen der Klasse ''MethodenFuerAlle'' erstellt und müssen das ''interface Sortierverfahren'' impementieren. Vermutlich ist das ein bisschen mit Kanonen auf Spatzen geschossen, aber das sah mir nach einer guten Gelegenheit aus, sowohl Vererbung als auch die ''interfaces'' zu üben und in ein Projekt einzubauen. Hier die Klasse und das Interface:
package Sortieralgorithmen;
public class MethodenFuerAlle {
public void tausche (int a [], int m, int n ) {
int c = a[m];
a[m] = a[n];
a[n] = c;
}
}
package Sortieralgorithmen;
public interface Sortierverfahren {
public int [] sortiere (int [] zahlen);
public String getName();
public String getSource();
}
Man beachte hier, dass Java lediglich ''call by value'' versteht. Das bedeutet, dass die Methode nicht folgendermaßen erstellen kann:
public void tausche (int a, int b) { ... }
In diesem Falle würde ein Aufruf ''tausche (zahlen[i], zahlen[j])'' nichts nutzen, da die Inhalte zwar in der Methode getauscht werden, die Vertauschung aber nicht mit zurückgegeben werden kann. Der Kopf
public void tausche (int a[], int m, int n) { ... }
sorgt aber dafür, dass als ''value'' die Referenz auf die Reihung und die beiden Positionen in der Reihung übergeben werden. So kann in ''tausche'' direkt auf die //echte// Reihung zugegriffen werden.
Hier nun in Java...
===== Sortieren durch Auswahl - Version 1 =====
package Sortieralgorithmen;
/**
*
* @author claudius
*/
public class Auswahl1 extends MethodenFuerAlle implements Sortierverfahren {
public String getName() {
return ("Sortieren durch Auswahl - I");
}
public String getSource() {
[...]
}
/** Creates a new instance of Auswahl1 */
public Auswahl1() {
}
public int posmin (int [] zahlen) {
// liefert die Position des kleinsten Elements
int pos = 0;
for (int i=1; imax) {
max = zahlen[i];
}
}
return (max);
}
public int [] sortiere (int [] zahlen) {
int [] zahlen2 = new int [zahlen.length];
int max = max(zahlen)+1;
for (int i=0; i
===== Sortieren durch Auswahl - Version 2 =====
package Sortieralgorithmen;
/**
*
* @author claudius
*/
public class Auswahl2 extends MethodenFuerAlle implements Sortierverfahren {
public String getName() {
return ("Sortieren durch Auswahl - II");
}
public String getSource() {
[...]
}
/** Creates a new instance of Auswahl2 */
public Auswahl2() {
}
public int posmin (int [] zahlen, int a, int b) {
// liefert die Position des kleinsten Elements im Bereich a bis b
int pos = a;
for (int i=a; i<=b; i++) {
if (zahlen[i]zahlen[kleinste]) {
tausche (zahlen,i,kleinste);
}
}
return (zahlen);
}
}
===== Sortieren durch Einfügen =====
package Sortieralgorithmen;
/**
*
* @author claudius
*/
public class Einfuegen extends MethodenFuerAlle implements Sortierverfahren {
public String getName() {
return ("Sortieren durch Einfügen");
}
public String getSource() {
[...]
}
/** Creates a new instance of Einfuegen */
public Einfuegen() {
}
public int posmin (int [] zahlen, int a, int b) {
// liefert die Position des kleinsten Elements im Bereich a bis b
int pos = a;
for (int i=a; i<=b; i++) {
if (zahlen[i]nach; i--) {
zahlen[i] = zahlen[i-1];
}
zahlen[nach] = merke;
}
public int [] sortiere (int [] zahlen) {
int hinten = zahlen.length-1;
for (int i=0; i
===== Bubblesort =====
package Sortieralgorithmen;
/**
*
* @author claudius
*/
public class Bubblesort extends MethodenFuerAlle implements Sortierverfahren {
public String getName() {
return ("Bubblesort");
}
public String getSource() {
[...]
}
/** Creates a new instance of Bubblesort */
public Bubblesort() {
}
public int [] sortiere (int [] zahlen) {
for (int i=zahlen.length-2; i>=0; i--) {
for (int j=0; j<=i; j++) {
if (zahlen[j]>zahlen[j+1]) {
tausche (zahlen,j,j+1);
}
}
}
return (zahlen);
}
}
===== Quicksort =====
package Sortieralgorithmen;
/**
*
* @author claudius
*/
public class Quicksort extends MethodenFuerAlle implements Sortierverfahren {
private int [] zahlen;
public String getName() {
return ("Quicksort");
}
public String getSource() {
[...]
}
/** Creates a new instance of Quicksort */
public Quicksort() {
}
public int posPivot (int l, int r) {
int pivot = zahlen[ (l+r)/2 ];
while (true) {
while (zahlen[l]pivot) r--;
if (l