Algorytmy i Struktury Danych, 3. ćwiczenia
2015-10-16
Spis treści
1 Budowa kopca w algorytmie HeapSort 1
2 Przesunięcie cykliczne tablicy 1
3 Optymalne sortowanie 5–ciu elementów 2
1 Budowa kopca w algorytmie HeapSort
Kopiec możemy budować idąc od dołu do góry. Zauważmy, że ostatnie n/2 ele- mentów spełnia warunki kopca, pozostaje jedynie poprawić porządek w pierw- szych n/2 elementach.
for i = bn/2c downto 1 do DownHeap(i)
end for
Koszt budowy kopca możemy opisać wzorem:
n 4 · 2 +n
8 · 4 + n
16· 6 + . . . = n ·X
i=1
i 2i =
n · (X
i=1
1 2i +X
i=2
1 2i +X
i=3
1
2i + . . .) = n · (1 +1 2 +1
4+ . . .) = 2n
2 Przesunięcie cykliczne tablicy
Function CyclicLeftShift(a, k) n := len(a)
Reverse(a, 1, n − k) Reverse(a, n − k + 1, n) Reverse(a, 1, n)
1
3 Optymalne sortowanie 5–ciu elementów
Niech A = (a, b, c, d, e).
• compare(a, b), (niech a < b)
• compare(c, d), (niech c < d)
• compare(a, c), (niech a < c)
d
c a
b
• teraz wkładamy, e pomiędzy a, c, d,
if (e > c) then compare(e, a) else compare(e, d)
• możemy otrzymać jeden z następujących posetów:
każdy z nich można posortować używając 2 porównań.
2