Der Shakersort stellt eine geringfügige Verbesserung des Bubblesorts dar: Um weit von der richtigen Stelle liegende Elemente schneller einzusortieren, wird nach jedem Durchlauf die Laufrichtung umgekehrt. Die »schüttelnde« Bewegung des Verfahrens hat dem Algorithmus wohl seinen Namen gegeben...
Beispiel:
Code:
import java.awt.*;
import java.util.Random;
public class shaker extends java.applet.Applet {
int h[] = new int[101];
public void init() {
int i;
Random r = new Random();
for (i=1; i<=100; i++) {
h[i] = (int) (r.nextDouble()*100);
}
}
public void paint (Graphics g) {
int i;
int j;
int l;
int r;
int k;
int hilfsvar;
g.setColor(Color.white);
g.fillRect(0,0,500,100);
g.setColor(Color.black);
for (l=1;l<=100;l++) {
g.fillRect(l*5,100-h[l],3,h[l]);
}
l=2;
r=100;
k=100;
do {
for (j=r;j>=l;j--) {
for (int pause=1;pause<100000;pause++) {}
if (h[j-1]>h[j]) {
hilfsvar=h[j-1];
h[j-1]=h[j];
h[j]=hilfsvar;
k=j;
g.setColor(Color.white);
g.fillRect((j-1)*5,0,5,100);
g.fillRect(j*5,0,5,100);
g.setColor(Color.black);
g.fillRect((j-1)*5,100-h[j-1],3,h[j-1]);
g.fillRect(j*5,100-h[j],3,h[j]);
}
}
l=k+1;
for (j=l;j<=r;j++) {
for (int pause=1;pause<100000;pause++) {}
if (h[j-1]>h[j]) {
hilfsvar=h[j-1];
h[j-1]=h[j];
h[j]=hilfsvar;
k=j;
g.setColor(Color.white);
g.fillRect((j-1)*5,0,5,100);
g.fillRect(j*5,0,5,100);
g.setColor(Color.black);
g.fillRect((j-1)*5,100-h[j-1],3,h[j-1]);
g.fillRect(j*5,100-h[j],3,h[j]);
}
}
r=k-1;
} while (l<=r);
}
}
Kommentar:
Das Sortieren durch Austauschen ist jedenfalls ungüns-tiger als das Sortieren durch Einfügen und schlechter als das Sortieren durch Auswählen.
| zurück zu Sortieralgorithmen |