


import java.util.ArrayList;

/**
 *
 * @author bal
 */
public class ArraySortieren {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int[] zahlen = {3,1,4,5,2};
        int[] arraySortiert;
        arraySortiert = triangleSort(zahlen);
        //arraySortiert = bubbleSort(zahlen);
        //arraySortiert = quickSort(zahlen);

        for (int i = 0; i < arraySortiert.length; i++) {
            System.out.print(arraySortiert[i]+" ");
        }
        System.out.println("");
    }

    public static int[] triangleSort(int[] array) {
        int tmp;
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = i + 1; j < array.length; j++) {
                if (array[i] > array[j]) {
                    tmp = array[i];
                    array[i] = array[j];
                    array[j] = tmp;
                }
            }
        }
        return array;
    }
    
    public static int[] bubbleSort(int[] array) {
        boolean tausch;
        do {
            tausch=false;
            for (int i = 0; i < array.length-1; i++) {
            if (array[i]>array[i+1]) {
                //tauschen
                tausch=true;
                int tmp = array[i];
                array[i] = array[i+1];
                array[i+1] = tmp;
            }
        }
        } while(tausch==true);
        return array;
    }
    
    
    public static int[] quickSort(int[] array) {
        // Array in ArrayList umwandeln
        ArrayList<Integer> l = new ArrayList<Integer>();
        for (int el : array) {
           l.add(el); 
        }
        
        //quicksort aufrufen
        ArrayList<Integer> resList=quicksort(l);

        //ArrayList in Array umwandeln
        int[] res = new int[resList.size()];
        for (int i = 0; i < res.length; i++) {
           res[i]=resList.get(i);
        }

        return res;        
    }

    public static ArrayList<Integer> quicksort(ArrayList<Integer> a) {
        //Abbruch Rekursion
        if (a.size()<=1) return a;

        //Datenstrukturen
        int teiler = a.get(0);
        ArrayList<Integer> links = new ArrayList<>();
        ArrayList<Integer> rechts = new ArrayList<>();

        
        // Listen links, rechts füllen, 
        for (int i = 1; i < a.size(); i++) { //beachte: i=1, teiler überspringen
            int el = a.get(i);
            if (el<teiler)
                links.add(el);
            else 
                rechts.add(el);
        }
        
        //Rekursion
        return verbinde(quicksort(links),teiler,quicksort(rechts));                
    }
    
    public static ArrayList<Integer> verbinde(ArrayList<Integer> links, int teiler,
                                              ArrayList<Integer> rechts) {
        ArrayList<Integer> res = new ArrayList<>();
        res.addAll(links);
        res.add(teiler);
        res.addAll(rechts);
        return res;
    }
    

}
