NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze – Lekce 5 - Merge Sort

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Odpovídá na Peter Mlich
Patrik Pastor:21.4.2019 8:46

jak je to s tou rekurzi a slitim. Kdzy je podminka rekurze, ze se mi vrati z metody pri velikosti pole 1 (a mensi, ale mensi uz nebude, kdyz to dojde nejdriv na 1ku), tak ani k tomu sliti prece nedojde, protoze rekurze je volana PRED slitim. Nebo se vola rekurze, interpet pokracuje na prikaz sliti(merge)?

 
Odpovědět
21.4.2019 8:46
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Patrik Pastor
David Hartinger:21.4.2019 11:58

To je správně, že je rekurze volaná před slitím, až se zní vystoupí a program se tam vrátí, tak se oba výsledky rekurze slijí a vznikne tak nový výsledek rekurze, který se vrátí a tak dále. Z toho co jsi napsal mi přijde, že ti není úplně jasné jak rekurze funguje. Dej si na konec metody break point a odkrokuj si algoritmus v IDE.

Máš to na tom obrázku. Na konci metody se volá vždy slití. To se neprovede jen v případě, že je pole o velikosti 1. Takže se to vše rekurzivně provolá až zbude pole o velikosti 1. Teď se rekurze ukončí a výsledek se postupně začne vracet do řetězce metod, jak čekají na výsledek. Metodě, která měla pole o velikosti větší než 1, se pak vrátí 2 pole o jednom prvku a ona je slije. Metodě, co ji volala, se opět vrátí tento výsledek a ten slije s výsledkem druhé metody, kterou spolu s ní zavolala a tak dále.

Odpovědět
21.4.2019 11:58
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Patrik Pastor:21.4.2019 12:36

aha. Ja jsem totiz myslel, ze jak je ta rekurzivni podminka (if pole.length <= 1) return. Tak ze to slovicko "return" v te podmince celou metodu znici (ve smyslu ze program uz je MIMO tuto metodu (diky tomu return), a ke sliti by tedy nedoslo, protoze to sliti je UVNITR metody, ale prace tim return by uz program byl mimo metodu. Doufam ze rozumis, jak to myslim, ale ted chapu.

 
Odpovědět
21.4.2019 12:36
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Patrik Pastor
David Hartinger:21.4.2019 12:56

No to tak také je, nic po return se už nezavolá. Ale ta metoda, i když se násilně ukončí pomocí return, byla zavolána před slitim z předchozí metody. Program se tam tedy vrati a výsledky slije. Kdyz zavoláš někde nějakou metodu, program si to pamatuje a po jejím ukončení jakýmkoli způsobem se na toto místo vrátí. Psal jsem ti, ať si to odkrokujes, pak to uvidíš hned :-) Vážně si to zkus.

Editováno 21.4.2019 12:57
Odpovědět
21.4.2019 12:56
New kid back on the block with a R.I.P
Avatar
 
Odpovědět
21.4.2019 13:04
Avatar
MarMin
Člen
Avatar
MarMin:31.3.2020 15:25

Je možné, že mi pro různá pole stejné délky vychází při řazení mergesortem stále stejný počet kroků nebo mám chybu v programu. U mocnin dvojky je to přesně.

 
Odpovědět
31.3.2020 15:25
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 16.