B5

import java.util.Arrays;

import sk.upjs.paz.calltree.CallTree;

public class QuickSort extends TriediaciAlgoritmus {

        @Override
        protected void utried(int dlzkaPola) {
                quickSort(0, dlzkaPola - 1);
        }

        private void quickSort(int odIdx, int poIdx) {
                CallTree.markCall(odIdx, poIdx);
                if (poIdx <= odIdx) {
                        return;
                }

                int nahodnyIndex = odIdx + (int) (Math.random() * (poIdx - odIdx + 1));
                vymen(nahodnyIndex, poIdx);

                // pivotizacia
                int idxMensich = odIdx;
                for (int i = odIdx; i <= poIdx - 1; i++) {
                        if (porovnaj(i, poIdx) < 0) {
                                vymen(i, idxMensich);
                                idxMensich++;
                        }
                }
                vymen(poIdx, idxMensich);

                // rekurzia
                quickSort(odIdx, idxMensich - 1);
                quickSort(idxMensich + 1, poIdx);
        }

        /**
         * @param args
         */

        public static void main(String[] args) {
                QuickSort sortovac = new QuickSort();
                int[] p = { 5, 3, 9, 10, 1, 8 };
                sortovac.utried(p);
                System.out.println(Arrays.toString(p));

        }

}