na obsah klávesové zkratky na hlavní stránku na menu

Šesté cvičení – ukazatele

Na této hodině jsme probrali velkou část práce s ukazateli. Šlo o náročné teoretické téma.

Obsah cvičení

Ukazatele jsou jednou z nejnáročnějších částí jazyka C. Na této přednášce jsme si probrali jejich vytváření, používání a dereferenci. Dále jsme si ukázali ukazatele na funkce a vícenásobné ukazatele.

Doplňte níže odkazovaný kód podle instrukcí tak, abyste nakonec získali obecnou funkci my_qsort(). Program bude hojně využívat adresovou aritmetiku.
  1. Prostudujte si variantu třídícího algoritmu quick sort, která třídí na místě.
  2. Doplňte kód funkce compare(). Funkce bude srovnávat hodnoty typu int standardním způsobem. Funkce vrací hodnotu 1, je-li *a větší než *b, 0, jsou-li hodnoty stejné, a -1, je-li *b větší než *a. Nezapomeňte, že zde pracujete s ukazateli, nikoliv přímo s hodnotami. Před porovnáváním je nutné ukazatel přetypovat a následně dereferencovat.
  3. Otestujte si funkčnost funkce compare() odkomentováním příslušných řádek ve funkci main().
  4. Doplňte kód funkce swap(). Tato funkce přehodí hodnoty na zadaných adresách. Část kódu už je připravena pro použití. Jelikož neznáte povahu dat na daných ukazatelích, budete muset překopírovat data bajt (char) po bajtu (charu). Počet bajtů je uložen v parametru size.
  5. Vysvětlete podrobně, co se děje ve funkci partition(). Okomentujte kód.
  6. Ve funkci my_qsort() chybí dvě řádky. Jde o rekurzivní volání téže funkce nad podčásti pole. Doplňte volání a také první dva parametry předávané do funkce. Jde o začátek podčásti a její velikost. Použijte pozici new, base a velikost aktuální části. Nezapomeňte na to, že rozdíl ukazatelů vrátí počet bajtů mezi nimi, a tak je nutné vydělit výsledek velikostí size.
Kostra programu my_qsort.