Zadání úlohy 4. (zadává se v týdnu od 20. října)

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

Jak se budou třídy lišit:

  1. 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

  2. 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

  3. 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

  4. 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

Jak postupovat:

  1. Kostry tříd uložte do balíku cz.muni.fi.{vaslogin}.searching

  2. Upravte je, aby dělaly, co mají.

  3. 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)

  4. 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

Jak se budou dvě třídy lišit:

Jak postupovat:

  1. Kostry tříd BubbleSorter a QuickSorter uložte do balíku cz.muni.fi.{vaslogin}.sorting

  2. Upravte je, aby dělaly, co mají.

  3. 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)

  4. 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ů.