Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Sorty Bubble, Insert a Quick
Vypracoval: Martin Kasalý a Vojtěch Prokůpek
2
Bubble sort Implementačně jednoduchý řadicí algoritmus
Využívá se hlavně pro výukové účely či v nenáročných aplikacích Tento algoritmus řazení je jedním z nejpomalejších Složitost
3
Princip Porovnává dva sousední prvky a pokud je nižší číslo nalevo od vyššího, tak je prohodí (nižší číslo je lehčí a rychleji stoupá ke konci pole) a se stejnou logikou pokračuje na dalším indexu. Pokud jsou čísla ve správném pořadí, tak je neprohodí – pouze postoupí dále (algoritmus tím našel lehčí bublinku). Na konci iterace se tímto způsobem na konec pole vždy dostane ta nejlehčí bublinka (nejnižší číslo)
4
Zdroják public static void bubbleSort(int[] array) { for (int i = 0; i < array.length - 1; i++) { for (int j = 0; j < array.length - i - 1; j++) { if(array[j] < array[j+1]) { int tmp = array[j]; array[j] = array[j+1]; array[j+1] = tmp; } } } }
5
Animace
6
Insert sort Je to jeden z nejrychlejších algoritmů s kvadratickou časovou složitostí Efektivní na malých množinách Složitost , avšak u téměř seřazeného pole se mění složitost na
7
Princip Posloupnost rozdělíme na seřazenou a neseřazenou tak, že seřazená obsahuje první prvek posloupnosti Z neseřazené části vybereme první prvek a zařadíme jej na správné místo v seřazené posloupnosti Prvky v seřazené posloupnosti posuneme o jednu pozici doprava Seřazenou část zvětšíme o jeden prvek. Naopak neseřazenou část o jeden prvek zleva zmenšíme Kroky 2-5 aplikujeme až do úplného seřazení neseřazené části
8
Zdroják public static void insertionSort(int[] array) { for (int i = 0; i < array.length - 1; i++) int j = i + 1; int tmp = array[j]; while (j > 0 && tmp > array[j-1]) array[j] = array[j-1]; j--; } array[j] = tmp;
9
Animace
10
Quicksort Zvolme v zadaném poli libovolný prvek a říkejme mu pivot. Nyní můžeme pole přeházet tak, aby na jedné straně byly prvky větší než pivot, na druhé menší než pivot a pivot samotný byl umístěn přesně mezi těmito částmi. Tento postup můžeme zopakovat pro obě rozdělené části (bez pivota, ten je již umístěn na správném místě). Proceduru opakujeme tak dlouho, dokud nenarazíme na všechny triviálně řešitelné podproblémy (pole velikosti 1). V tento okamžik je celé pole seřazeno od nejvyššího prvku.
11
Animace
12
Výkonnost algoritmu Výkonnost quicksortu je dána především volbou dobrého pivota. Pokud jej volíme ideálně, tak dojde při každém rekurzívním volání k rozpůlení pole a vystačíme si tedy s voláními, v nichž popřehazujeme až prvků. Složitost tohoto případu je proto
13
Zdroják public static void quicksort(int[] array, int left, int right) { if(left < right) int boundary = left; for(int i = left + 1; i < right; i++) if(array[i] > array[left]) swap(array, i, ++boundary); } swap(array, left, boundary); quicksort(array, left, boundary); quicksort(array, boundary + 1, right); } private static void swap(int[] array, int left, int right) int tmp = array[right]; array[right] = array[left]; array[left] = tmp;
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.