/**
 * Sortiert ein gegebenes int-Array aufsteigend.
 * Es wird der sog. Bubble-Sort Algorithmus verwendet.
 *
 * @author Holger Knublauch
 */
public class BubbleSort2 
{
    public static void main (String args[]) 
    {
        // Erzeuge ein beliebiges Werte-Array
        int[] werte = { 54, 12, -32, 0, 9, -1 };
        bubbleSort(werte);
        gibArrayAus(werte);
    }
    
    
    /**
     * Sortiert ein gegebenes Array aufsteigend.
     * Die Methode verwendet den Bubble-Sort Algorithmus.
     * @param werte die zu sortierenden Werte
     */
    public static void bubbleSort(int[] werte)
    {
        // fertig zeigt an, ob in einem Durchlauf mindestens
        // ein Wert getauscht wurde (d.h. ob noch ein Durchlauf
        // nötig ist
        boolean fertig = false; // Wert ist hier egal
        do
        {
            fertig = true;
            
            // Durchlaufe alle Werte (bis auf letzten)
            for(int i = 0; i < werte.length - 1; i++)
            {
                // Wenn zwei benachbarte Werte falschrum liegen
                if(werte[i] > werte[i + 1])
                {
                    tauscheNachbarn(werte, i);
                    fertig = false; // Noch ein Durchlauf nötig
                }
            }
        }
        while (!fertig);
    }
    
    
    /**
     * Vertauscht zwei Elemente in einem gegebenen Array.
     * @param werte das Werte-Array
     * @param i der Index des ersten Elements (wird mit i + 1 getauscht)
     */
    public static void tauscheNachbarn(int[] werte, int i)
    {
        int z = werte[i];
        werte[i] = werte[i + 1];
        werte[i + 1] = z;
    }
    

    /**
     * Gibt die Werte eines angegebenen Arrays aus.
     * @param werte das auszugebende Array
     */
    public static void gibArrayAus(int[] werte)
    {
        System.out.println("Werte:");
        for(int i = 0; i < werte.length; i++) 
        {
            System.out.println("  [" + i + "] = " + werte[i]);
        }
    }
}
