]> mj.ucw.cz Git - ads1.git/blobdiff - slides/quicksort.tex
DFS: Revize pro novou prednasku
[ads1.git] / slides / quicksort.tex
index 7ff63cafc359c1c36fab248709f2cfb2029b9b7d..c5122754f48213236361cafeba87190663001706 100644 (file)
@@ -43,8 +43,10 @@ $\<Sort>(X, a, b):$ {\cmt (set
 \::Dokud $l \le r$, opakujeme:
 \:::Dokud $X[l]<p$: $l\leftarrow l+1$.
 \:::Dokud $X[r]>p$: $r\leftarrow r-1$.
-\:::$X[l] \leftrightarrow X[r]$.
-\:::$l\leftarrow l+1$, $r\leftarrow r-1$.
+\:::Je-li $l\le r$:
+\::::$X[l] \leftrightarrow X[r]$
+\::::$l\leftarrow l+1$
+\::::$r\leftarrow r-1$
 \:$\<Sort>(X, a, r)$, $\<Sort>(X, l, b)$.
 \endalgo
 
@@ -77,15 +79,15 @@ $\<Sort>(X):$
 \:Pokud $n=\vert X\vert \le 1$, skonèíme rovnou.
 \:{\new $a\leftarrow 1$, $b\leftarrow n$, $S\leftarrow\emptyset$.}
 \:{\new Opakujeme:} {\cmt (právì tøídíme $X[a],\ldots,X[b]$, $S$ je zásobník)}
-\::$m\leftarrow \lfloor (a+b)/2 \rfloor$, $p \leftarrow X[m]$.
-\::Pøeházíme prvky \dots\ $\rightarrow l,r$.
-\::{\new Pokud $r-a > b-l$, prohodíme $(a,r) \leftarrow (l,b)$. \\ {\cmt (interval $(a,r)$ je teï ten men¹í)}}
-\::{\new Pokud $l\ge b$: {\cmt (oba intervaly jsou triviální)}}
+\::Vybereme pivota a pøeházíme prvky \dots\ $\rightarrow l,r$.
+\::{\new Pokud $r-a > b-l$, prohodíme $(a,r) \leftrightarrow (l,b)$. \\ {\cmt (interval $(a,r)$ je teï ten men¹í)}}
+\::{\new Pokud $r>a$:} {\cmt (oba intervaly jsou netriviální)}
+\:::{\new Pøidáme $(l,b)$ do~$S$.} {\cmt (vìt¹í na~zásobník)}
+\:::{\new $(a,b) \leftarrow (a,r)$.} {\cmt (pokraèujeme men¹ím)}
+\::{\new Jinak pokud $b>l$: $(a,b) \leftarrow (l,b)$.} {\cmt (vìt¹í netriviální)}
+\::{\new Jinak:} {\cmt (oba triviální)}
 \:::{\new Pokud $S=\emptyset$, skonèíme.}
 \:::{\new Jinak odebereme $(a,b)$ z~$S$.}
-\::{\new Jinak: {\cmt (vìt¹í je netriviální)}}
-\:::{\new Pokud $a<r$, pøidáme $(a,r)$ do~$S$ {\cmt (men¹í také)}}
-\:::{\new $(a,b) \leftarrow (l,b)$. {\cmt (pokraèujeme vìt¹ím)}}
 \endalgo
 
 {\sit Nyní staèí $\O(\log n)$ pamìti pro zásobník.}
@@ -101,15 +103,15 @@ $\<Sort>(X{\new, K}):$ {\cmt ($K$ je vhodn
 \:{\new Pokud $n=\vert X\vert \le K$, setøídíme InsertSortem.}
 \:$a=1$, $b=n$, $S=\emptyset$.
 \:Opakujeme:
-\::$m\leftarrow \lfloor (a+b)/2 \rfloor$, $p \leftarrow X[m]$.
-\::Pøeházíme prvky \dots\ $\rightarrow l,r$.
-\::Pokud $r-a > b-l$, prohodíme $(a,r) \leftarrow (l,b)$.
-\::{\new Pokud $b-l \le K$: {\cmt (oba intervaly jsou triviální)}}
-\:::Pokud $S=\emptyset$, skonèíme.
-\:::Jinak odebereme $(a,b)$ z~$S$.
-\::Jinak: {\cmt (vìt¹í je netriviální)}
-\:::{\new Pokud $r-a > K$, pøidej $(a,r)$ do~$S$ {\cmt (men¹í také)}}
-\:::$(a,b) \leftarrow (l,b)$. {\cmt (pokraèujeme vìt¹ím)}
+\::Vybereme pivota a pøeházíme prvky \dots\ $\rightarrow l,r$.
+\::Pokud $r-a > b-l$, prohodíme $(a,r) \leftrightarrow (l,b)$.
+\::{Pokud {\new $r-a > K$}:} {\cmt (oba intervaly jsou netriviální)}
+\:::{Pøidáme $(l,b)$ do~$S$.} {\cmt (vìt¹í na~zásobník)}
+\:::{$(a,b) \leftarrow (a,r)$.} {\cmt (pokraèujeme men¹ím)}
+\::{Jinak pokud {\new $b-l > K$}: $(a,b) \leftarrow (l,b)$.} {\cmt (vìt¹í netriviální)}
+\::{Jinak:} {\cmt (oba triviální)}
+\:::{Pokud $S=\emptyset$, skonèíme.}
+\:::{Jinak odebereme $(a,b)$ z~$S$.}
 \:{\new Dotøídíme posloupnost InsertSortem.} \\ {\cmt (ka¾dý prvek se posune o~nejvý¹e~$K$, tak¾e je to lineární)}
 \endalgo