import algds.IOUtils;

public class aufgabe30 {
    /*
     * Hilfsmethode: Ausgabe der Elemente eines Feldes
     */
    static void printFeld (Comparable[] feld) {
        for (int i = 0; i < feld.length; i++)
        System.out.print (feld[i] + " ");
        System.out.println ();
    }
    /*
     * Hilfsmethode: Austauch zweier Feldelemente
     */
    static void swap (Comparable[] feld, int idx1, int idx2) {
        Comparable temp = feld[idx1];
        feld[idx1] = feld[idx2];
        feld[idx2] = temp;
    }

    /*
     * Implementierung des SelectionSort
     */
    static void selectionSort (Comparable[] feld) {
        int marker = feld.length - 1;
        while (marker >= 0) {
            // bestimme größtes Element
            int max = 0;
            for (int i = 1; i <= marker; i++)
            if (feld[i].compareTo(feld[max])>0)
            max = i;
            // tausche feld[marker] mit diesem Element
            swap (feld, marker, max);
            marker--;
        }
    }
    public static void main(String[] args) {
        Comparable[] feld = null;
    Integer[] feldInt = {new Integer(22), new Integer(6), new Integer(12)};
        printFeld(feldInt);
        selectionSort(feldInt);
        printFeld(feldInt);
    Character[] feldChar = {new Character('a'), new Character('z'), new Character('h')};
        printFeld(feldChar);
        selectionSort(feldChar);
        printFeld(feldChar);
    String[] feldString = {"Wolfgang", "Konrad ", "Detlef", "Berta ", "Susi"};
        printFeld(feldString);
        selectionSort(feldString);
        printFeld(feldString);
        System.out.println();
        
        //Einlesen der Integer-Objekte
        System.out.print ("Wieviel Integer-Elemente :  ");
        int ei = IOUtils.readInt ();
        System.out.println (ei);
        Integer[] feldInt2 = new Integer[ei]; //Feld wird erzeugt
        for (int i=0; i<=(ei-1); i++){
            System.out.print((i+1)+" Zahl : ");
            Integer zahl = new Integer(IOUtils.readInt()); //Einlesen
            System.out.println(zahl);
            feldInt2[i] = (zahl); //Objekt kommt ins Feld
        }
        System.out.print("Unsortiert : ");
        printFeld(feldInt2);
        selectionSort(feldInt2);
        System.out.print("Sortiert   : ");
        printFeld(feldInt2);
        System.out.println();
        
        //Einlesen der Char-Objekte
        System.out.print ("Wieviel Char-Elemente :  ");
        int ec = IOUtils.readInt ();
        System.out.println (ec);
        Character[] feldChar2 = new Character[ec]; //Feld wird erzeugt
        for (int i=0; i<=(ec-1); i++){
            System.out.print((i+1)+" Zeichen : ");
            Character ch = new Character(IOUtils.readChar()); //Einlesen
            System.out.println(ch);
            feldChar2[i] = (ch); //Objekt kommt ins Feld
        }
        System.out.print("Unsortiert : ");
        printFeld(feldChar2);
        selectionSort(feldChar2);
        System.out.print("Sortiert   : ");
        printFeld(feldChar2);
        System.out.println();
        
        //Einlesen der String-Objekte
        System.out.print ("Wieviel String-Elemente :  ");
        int es = IOUtils.readInt ();
        System.out.println (es);
        String[] feldString2 = new String[es]; //Feld wird erzeugt
        for (int i=0; i<=(es-1); i++){
            System.out.print((i+1)+" Wörter : ");
            String str = IOUtils.readString(); //Einlesen
            System.out.println(str);
            feldString2[i] = (str); //Objekt kommt ins Feld
        } 
        System.out.print("Unsortiert : ");
        printFeld(feldString2);
        selectionSort(feldString2);
        System.out.print("Sortiert   : ");
        printFeld(feldString2);
        System.out.println();
        System.out.print("Ende");







    }
}