Zkuste podrobně popsat vlastními slovy postup jak seřadit: ˇ 10 hracích karet do ruky při rozdávání ˇ nastoupenou fotbalovou jedenáctku v dresech, pokud má předstoupit o krok dopředu seřazená podle čísel na dresech ˇ 200 písemek podle abecedy, jsou-li k dispozici 4 pomocníci ˇ lidi stojící ve frontě v úzké chodbě podle data narození (pokud každý může mluvit jenom se svým sousedem) Zkuste neformálně postihnout podstatu následujícího algoritmu. function s1(A[0..N-1]) begin left = 0; right = N - 1; swapped = true; while (swapped == true) swapped = false; for (i = left; i < right; i = i + 1) if (A[i] > A[i + 1]) then swap(A[i], A[i + 1]); swapped = true; right = right - 1; for (i = right; i > left; i = i - 1) if (A[i] < A[i - 1]) then swap(A[i], A[i - 1]); swapped = true; left = left + 1; end; Porovnejte následující programy xsort a ysort. Jaký koncept mají společný? V čem se zásadně liší? procedure xsort A[low,high]: if low[Int] mergeSort[] = [] mergeSort[x] = [x] mergeSort s = merge (mergeSort u) (mergeSort v) where (u,v) =splitAt (n 'div' 2) s n = length s merge s [] = s merge [] t = t merge (x:u)(y:v) = if x <= y then x:merge u (y:v) else y:merge (x:u) v quickSort :: [Int]->[Int] quickSort [] = [] quickSort (p:t) = quickSort lt ++ [p] ++ quickSort gs where lt = [x | x<-t, x=p] Porovnejte následující programy mergeSort a quickSort. Jaký koncept mají společný? V čem se zásadně liší? var A[1..n]:integer; procedure mergeSort(p,r:integer); procedure quickSort(p,r:integer); var q:integer; var q:integer; begin begin if pr or A[i]<=A[j]) then if A[j]>=x then B[k]:=A[i]; i:=i+1; i:=i+1; swap(A[i],A[j]); else swap(A[i+1],A[r]); B[k]:=A[j]; return(i+1); j:=j+1; end; for k:=p to r do A[k]:=B[k]; end; Dojde v chování následujícího algoritmu (Dijkstrův quicksort) k zásadní změně pokud nahradíme test na řádku č.8 testem ia do j:=j-1; 8. if i<=j then 9. swap(A[i],A[j]); 10. i:=i+1;j:=j-1; 11. until i>j; 12. if l / \ / \ ----------> 4 3 8 2 b) přidejte 5 7 3 ---------> c) přidejte 1 f) 5 10 přidejte 6 7 3 ---------> / \ / \ ----------> 4 3 8 2 d) 5 10 přidejte 11 / \ / \ ----------> 4 3 8 2 Odeberte z následující (maximové) haldy maximum a vytvořte opět (zleva zarovnanou) haldu: ___ 15 ___ / \ 14 13 / \ / \ 12 7 11 8 / \ / \ / \ / \ 4 9 6 5 1 10 3 2 Který algoritmus řazení je nejlepší? Název Časová složitost Min Prům Max bubblesort - řaz. výměnou (n) (n2 ) (n2 ) heapsort - řaz. haldou (n log n) (n log n) (n log n) insertsort - řaz. vkládáním (n) (n2 ) (n2 ) mergesort - řaz. slučováním (n log n) (n log n) (n log n) quicksort - řaz. rozdělováním (n log n) (n log n) (n2 ) selectsort - řaz. výběrem (n2 ) (n2 ) (n2 )