next up previous contents
Nächste Seite: Sortieren durch Einfügen Aufwärts: Sortierverfahren Vorherige Seite: Sortierverfahren   Inhalt

Sortieren durch direktes Auswählen (Minimumsuche)

Die Idee des vielleicht einfachsten Sortieralgorithmus ist die folgende: Finde zuerst das kleinste Element im Datenarray und tausche dieses gegen das an der ersten Stelle befindliche Element aus. Anschließend finde das zweitkleinste Element, tausche es gegen das zweite aus...

import java.awt.*;
import java.awt.event.*;
import java.util.Random;

public class Minimum extends Frame {

    int h[] = new int[101];

    public Minimum() {
        int i;
        Random r = new Random();        
        for (i=1;i<=100;i++) {
            h[i]=(int)(r.nextDouble()*80);
        }
    }

    public void paint(Graphics g) {
        int i;
        int min;
        int j;
        int l;
        int hilfsvar;

        g.setColor(Color.white);
        g.fillRect(0,0,505,120);
        g.setColor(Color.black);
        for (l=1;l<=100;l++) {
            g.fillRect(l*5,120-h[l],3,h[l]);
        }
        
        for (i=1;i<=100;i++) {
            min=i;
            for (j=i+1;j<=100;j++) {
            for (int pause=0;pause<100000;pause++) {}
                if (h[j]<h[min]) min=j;
            }
            g.setColor(Color.white);
            g.fillRect(min*5,20,5,100);
            g.fillRect(i*5,20,5,100);
            hilfsvar = h[min];
            h[min]=h[i];
            h[i]=hilfsvar;
            g.setColor(Color.black);
            g.fillRect(min*5,120-h[min],3,h[min]);
            g.fillRect(i*5,120-h[i],3,h[i]);
        }
    }

    public static void main (String [] args) {
        Minimum sprog = new Minimum();
        WindowListener wl = new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.out.println("... und aus ;-)");
                    System.exit(0);
                }
            };
        sprog.addWindowListener(wl);
        sprog.setTitle("Sortieren durch Minimumsuche");
        sprog.setLocation(100,100);
        sprog.setSize(520,120);
        sprog.show();
    }
}

Die eigentliche Sortierroutine ist in diesem sehr einfachen Programm einfach in die paint() - Methode eingebettet. Damit die ``Bewegung'' der Elemente beobachtet werden kann, wurde eine leere Zählschleife eingefügt (for (int pause=0;pause<100000;pause++).


\includegraphics[width=7cm]{SrMinimum.ps}


Sortieren durch direktes Auswählen ist für relativ kurze Listen gut geeignet. Zu beachten ist, dass jedes Element tatsächlich nur einmal getauscht wird.



Alfred Nussbaumer 2003-02-10