Sortowanie c.d.
Zadanie 6
(sortowanie szybkie; QuickSort)
Zaimplementuj procedurę sortującą QuickSort:
// język C
void QuickSort(int *tab, int i1, int i2)
{
}
{ język Pascal }
type t_tablica=array[1..1000] of integer;
procedure QuickSort(var tab:t_tablica; i1,i2:integer);
begin
end;
Procedura QuickSort polega na:
-
podzieleniu tablicy na dwie części A i B, w taki sposób że wszystkie elementy
A sa <= od elementów B, przy pomocy procedury "Podział"
-
posortowaniu A (rekurencyjne wywołanie QuickSort)
-
posortowaniu B (rekurencyjne wywołanie QuickSort)
Procedura "Podział" jest następująca:
-
niech "x" będzie elementem o indeksie i1
-
i:=i1-1; j:=i2+1;
-
przesuwamy indeks "j" w lewo tak długo aż znajdziemy element <=x
-
przesuwamy indeks "i" w prawo tak długo aż znajdziemy element >=x
-
jeśli i<j to zamieniamy i-ty i j-ty element tablicy, w przeciwnym wypadku
znaleźliśmy podział (są to przedziały: [i1...j] i [j+1...i2])
-
jeśli nie znaleźliśmy podziału to wracamy do punktu 3
x:=5 (to nie jest zgodne z pkt 1 ...)
i1 i2
| |
1 3 4 10 5 3 11 7
^ ^
i <-- j
1 3 4 10 5 3 11 7
^ ^
i j
1 3 4 10 5 3 11 7
^ ^
i --> j
1 3 4 10 5 3 11 7
^ ^
i j
1 3 4 3 5 10 11 7
^ ^
i j
(... i tak dalej)
UWAGA: procedura Podzał jest "bardzo trikowa"
- musi być zaprogramowana dokładnie tak jak to opisano powyżej.
Procedura powinna zliczać operacje porównywania elementów tablicy (w zmiennej
Czas). Przypomnijmy że pesymistyczny czas działania QuickSort to O(n^2),
jednak jeśli założymy że wszystkie permutacje wejściowego ciągu liczb są
równo prawdopodobne to średni czas działania QuickSort wynosi O(n log n).
Sprawdź działnie tej procedury na krótkich ciągach liczb.
... kilka bardzo prostych zadan ...
Zadanie 7
Mamy tablice jednowymiarowa. Wyznaczyc element MAX i MIN oraz wszystkie
pozycje na ktorych wystepuja.
Zadanie 8
Mamy tablice jednowymiarowa. Wyznaczyc element ktory najczesciej wystepuje.
Zadanie 9
Mamy tablice dwuwymiarowa (macierz). Wyzerowac elementy macierzy
lezace na glownej przekatnej oraz jej "dotykajace" (dotykajace przekatnej
bokiem a nie rogiem).