Algorytmy i programowanie Zadania domowe 6 0. Zapoznać się z

Transkrypt

Algorytmy i programowanie Zadania domowe 6 0. Zapoznać się z
Algorytmy i programowanie
Zadania domowe 6
0. Zapoznać się z implementacjami algorytmów sortowania - to zadanie zostanie ocenione na
następnym kolokwium.
1. Czy poniższy algorytm scalania z wartownikami dwóch posortowanych rosnąco ciągów znajdujących się w tablicy A w odpowiednich częściach A [p..q] i A [q + 1..r] jest prawidłowy? Odpowiedź
uzasadnij.
Scal (A, p, q, r)
for i ← 0 to q − p
do B [i + 1] ← A [p + i]
B [q − p + 2] ← ∞
for j ← 0 to r − q − 1
do B [j + q − p + 3] ← A [q + j + 1]
B [r − p + 2] ← ∞
i←1
j ←q−p+3
for k ← p to r
do if B [j] < B [i]
then A [k] ← B [j]
j ←j+1
else A [k] ← B [i]
i←i+1
2. Napisać pseudokod zmodyfikowanego algorytmu szybkiego sortowania, według poniżej opisanego sposobu:
Grupa A W procedurze podziału tablicy A [p..r] zaprezentowanej na wykładzie jako element
podziałowy wybierany jest ostatni element dzielonej tablicy A [r] - nie zawsze jest to wybór
optymalny! Lepszym rozwiązaniem byłoby element podziałowy wybrać spośród trzech elementów tablicy: pierwszego A [p], ostatniego A [r] i środkowego A [(p + q) div 2], jako ich wartość
środkową (czyli dla a ¬ b ¬ c będzie to b).
Grupa B Podczas rekurencyjnego wykonania algorytmu szybkiego sortowania w pewnym
momencie otrzymujemy posortowaną tablicę jednoelementową! Innym rozwiązaniem mogłoby być
na pewnym poziomie zatrzymanie rekurencyjnych wywołań algorytmu szybkiego sortowania i na
wyznaczonych podtablicach wykonanie ulubionego algorytmu sortowania innego niż szybkie!
Niech moment, w którym zmodyfikowany algorytm szybkiego sortowania wywoła inny algorytm
sortowania, będzie wyznaczony przez długość tablicy - mniejszą bądź równą sqrt (n) , gdzie n
jest długością wejściowej sortowanej tablicy, a nie podtablicy w kolejnym wywołaniu szybkiego
sortowania.

Podobne dokumenty