Š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.- Prostudujte si variantu třídícího algoritmu quick sort, která třídí na místě.
- Doplňte kód funkce
compare()
. Funkce bude srovnávat hodnoty typuint
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. - Otestujte si funkčnost funkce
compare()
odkomentováním příslušných řádek ve funkcimain()
. - 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 parametrusize
. - Vysvětlete podrobně, co se děje ve funkci
partition()
. Okomentujte kód. - 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 pozicinew
,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
.