Jednoduché vlastní implementace vyhledávacích a řadicích algoritmů (Lineární a binární vyhledávání)
Úvod
Tato úloha bude používat pole, které se dosud na přednáškách zmiňovalo jen v souvislosti s argumenty metody main, konkrétně v její hlavičce jsme viděli: main(String[] args).
Ani tato úloha ale nebude vyžadovat více znalostí o práci s polem, než jen to, že:
proměnná typu pole čísel float se deklaruje např. float[] poleCisel;
pole samo o sobě (i když obsahuje primitivní hodnoty) je objektového typu, tj. přiřazení poleCisel2 = poleCisel; pouze kopíruje odkaz, neduplikuje celé pole vč. obsahu!
obdobně deklarace proměnné typu pole, např. float[] poleCisel; pole nevytvoří, jen deklaruje odkaz na pole, které musí vzniknout jinak.
Např. voláním new float[10] vytvoříme pole o deseti prvcích typu float, hodnoty jsou všechny 0.
na jednotlivé prvky se, stejně jako ve většině jazyků, odkazujeme přes index prvku, tj. např. poleCisel[1] je druhý prvek pole. V Javě jsou totiž meze indexů polí vždy 0..početprvků-1.
Do takto referencovaného prvku pole lze samozřejmě i zapisovat, tj. poleCisel[1] = 5.2 vloží na druhé místo pole číslo 5.2.
Počet prvků pole najdeme v jeho proměnné length (nezapomínejme, že pole je objekt, může tudíž mít proměnné...),
tj. poleCisel má poleCisel.length prvků, nejvyšší index je poleCisel.length-1.
Část I. Cílem je napsat dvě třídy, jejichž objekty budou umět:
nastavit "do sebe" posloupnost určenou k vyhledávání
zodpovědět, na kterém indexu se nachází určitý prvek
zda se tam hledaný prvek vůbec nachází
Dále pak napsat dvě třídy rozšiřující dvě výše uvedené tak, aby navíc:
umožnily vyhledání maximálního a minimálního prvku
LinearSearcher bude vyhledávat v neuspořádaném poli lineárně - Kostra třídy LinearSearcher: http://www.fi.muni.cz/~tomp/java/ucebnice/javasrc/tomp/searching/LinearSearcher.java
BinarySearcher bude vyhledávat v uspořádaném poli půlením intervalu - algoritmus viz např. kurz (slidy) Úvod do programování (pozn.: nemusíte testovat, zda je zadané pole skutečně uspořádané) - Kostra třídy BinarySearcher: http://www.fi.muni.cz/~tomp/java/ucebnice/javasrc/tomp/searching/BinarySearcher.java
LinearSearcherMinMax bude rozšiřovat LinearSearcher tak, aby uměla vyhledat maximum/minimum - Kostra třídy LinearSearcherMinMax: http://www.fi.muni.cz/~tomp/java/ucebnice/javasrc/tomp/searching/LinearSearcherMinMax.java
BinarySearcherMinMax bude rozšiřovat BinarySearcher tak, aby uměla vyhledat maximum/minimum - Kostra třídy BinarySearcherMinMax: http://www.fi.muni.cz/~tomp/java/ucebnice/javasrc/tomp/searching/BinarySearcherMinMax.java
Kostry tříd uložte do balíku cz.muni.fi.{vaslogin}.searching
Upravte je, aby dělaly, co mají.
Do stejného balíku uložte také třídu Demo z http://www.fi.muni.cz/~tomp/java/ucebnice/javasrc/tomp/searching/Demo.java (je jasné, že uložení do balíku zároveň znamená úpravu deklarace package)
Třídy pro vyhledávání vyzkoušejte spuštěním vaší třídy Demo.
Část II. Řazení probubláváním a quicksort
Cílem je napsat dvě třídy objektů, jejichž objekty budou umět:
nastavit "do sebe" posloupnost určenou k uspořádání (setřídění)
setřídit ji
vrátit ji
BubbleSorter bude pole řadit probubláváním - Kostra třídy BubbleSorter
QuickSorter bude pole řadit metodou rychlého řazení (quicksort) viz např. kurz (slidy) Úvod do programování nebo Návrh algoritmů I Kostra třídy QuickSorter
Kostry tříd BubbleSorter a QuickSorter uložte do balíku cz.muni.fi.{vaslogin}.sorting
Upravte je, aby dělaly, co mají.
Do stejného balíku uložte také třídu Demo z http://www.fi.muni.cz/~tomp/java/ucebnice/javasrc/tomp/sorting/Demo.java (je jasné, že uložení do balíku zároveň znamená úpravu deklarace package)
Třídy pro řazení vyzkoušejte spuštěním vaší třídy Demo.
Pozn: Pokud cvičící zadání modifikuje, je to OK. Tohle je vzorové zadání. Za obě části úlohy dohromady získáte opět max. 5 bodů.