C2


public class Cvicenie2 {

        /**
         * @param args
         */

        public static void main(String[] args) {
                // TODO Auto-generated method stub

                int[] p={2,3,4,5,6,8,9,55,5674};
                System.out.println(Cvicenie2.binarneHladajIndex(p, 8));

        }

        public static boolean jeUsporiadane(int[] p) {
                for (int i=1; i<p.length; i++) {
                        if (p[i] <= p[i-1]) {
                                return false;
                        }
                }
                return true;
        }

        public static int binarneHladajIndex(int[] p, int hodnota) {
                int zac=0;
                int kon=p.length-1;

                while(zac!=kon){
                        int stred=(zac+kon)/2;
                        if(p[stred]==hodnota){
                                return stred;
                        }
                        if(p[stred]>hodnota){
                                kon=stred-1;
                        }else{
                                zac=stred+1;
                        }
                }
                //teraz sa zac rovna kon
                if(p[zac]==hodnota){
                        return zac;
                }else{
                        return -1;
                }
        }

}
 
import java.util.Arrays;

public abstract class TriediaciAlgoritmus {

        /**
         * Aktualne usporiadavane pole
         */

        private int[] p;
        private int pocetVymen;
        private int pocetPorovnani;

        /**
         * Porovna prvky v poli na zadanych indexoch
         *
         * @return vrati zaporne cislo, ak p[idx1]
         *         < p[idx2], * 0, ak p[idx1]==p[idx2], a * kladne cislo, ak p[idx1] >
         *         p[idx2]
         */

        protected int porovnaj(int idx1, int idx2) {
                pocetPorovnani++;
                return p[idx1] - p[idx2];

                /*
                 * Alternativa: if (p[idx1] < p[idx2]) return -1; if (p[idx1] > p[idx2])
                 * return 1; return 0;
                 */

        }

        /**
         * Vymeni prvky v usporiadavanom poli na zadanych indexoch
         */

        protected void vymen(int idx1, int idx2) {
                int pom = p[idx1];
                p[idx1] = p[idx2];
                p[idx2] = pom;
                pocetVymen++;
        }

        /**
         * Vypise pole
         */

        protected void vypisPole() {
                System.out.println(Arrays.toString(p));
        }

        /**
         * Usporiada prvky v poli od najmensieho po najvacsie
         *
         * @param p
         *            pole, ktoreho prvky maju byt usporiadane
         */

        public void utried(int[] p) {
                this.p = p;
                pocetVymen = 0;
                pocetPorovnani = 0;
                utried(p.length);
                vypisPole();
                System.out.println("Pocet porovnani bol: "+pocetPorovnani+"\t Pocet vymen bol: "+pocetVymen);
                this.p = null;
        }

        /**
         * Metoda, ktora implementuje triedenie podla urciteho algoritmu
         *
         * @param dlzkaPola
         *            dlzka (pocet prvkov) usporiadavaneho pola
         */

        protected abstract void utried(int dlzkaPola);
}
public class BubbleSort extends TriediaciAlgoritmus{


        @Override
        protected void utried(int dlzkaPola) {
                // TODO Auto-generated method stub
                boolean bolaVymena;
                int kolkoKratZbeholFor=0;
                do {
                        bolaVymena = false;
                        for (int i = 0; i < dlzkaPola - 1-kolkoKratZbeholFor; i++)
                                if (porovnaj(i, i+1)>0) {
                                        vymen(i, i + 1);
                                        bolaVymena = true;
                                }
                        kolkoKratZbeholFor++;
                } while (bolaVymena);
        }
}
 
import java.util.Arrays;


public class Sputac {

        /**
         * @param args
         */

        public static void main(String[] args) {
                // TODO Auto-generated method stub

                int[] p={6,5,4,3,2,1};
                TriediaciAlgoritmus b=new BubbleSort();
                b.utried(p);
                TriediaciAlgoritmus s=new SelectionSort();
                s.utried(p);
                //System.out.println(Arrays.toString(p));
        }

}
 
public class SelectionSort extends TriediaciAlgoritmus {

        @Override
        protected void utried(int dlzkaPola) {
                // TODO Auto-generated method stub
                for (int i = 0; i < dlzkaPola - 1; i++) {
                        int minIdx = i;
                        for (int j = i + 1; j < dlzkaPola; j++)
                                if (porovnaj(j,minIdx)<0)
                                        minIdx = j;
                        vymen(i,minIdx);
                }
        }

}
 
public class Zlozitost {

        // Celkovy pocet zrealizovanych operacii
        public static int pocet = 0;

        // Elementarna operacia
        public static void operacia() {
                pocet++;
        }

        // Linearny pocet operacii v zavislosti od n
        public static void linearna(int n) {
                for (int i = 0; i < n; i++)
                        operacia();
        }

        // n.log(n) pocet operacii v zavislosti od n
        public static void nlogn(int n) {
                for (int i = 0; i < n; i++)
                        for (int j = 1; j < n; j = j * 2)
                                operacia();
        }

        // Kvadraticky pocet operacii v zavislosti od n
        public static void kvadraticka(int n) {
                for (int i = 0; i < n; i++)
                        for (int j = 0; j < n; j++)
                                operacia();
        }

        // Exponencialny pocet operacii v zavislosti od n
        public static void exponencialna(int n) {
                if (n <= 1) {
                        operacia();
                        return;
                }

                // 2^n = 2*2^(n-1)
                exponencialna(n - 1);
                exponencialna(n - 1);
        }

        public static void main(String[] args) {
                System.out.println("Zaciatok...");
                long zaciatok = System.nanoTime();

               kvadraticka(380000);

                long koniec = System.nanoTime();
                System.out.println("Cas behu: " + ((koniec - zaciatok) / 1000000)
                                + " milisekund");
        }
}