1 / 24

Třídění

Třídění. Seminář IVT. Definice. uspořádání skupiny dat (záznamů) dle daného klíče vzestupně (od nejmenší do největší hodnoty klíče) sestupně (od největší do nejmenší hodnoty klíče) příklady data žáků, pracovníků, … jistých osob dle příjmení a jména (podle abecedy) – kombinovaný klíč

lovey
Download Presentation

Třídění

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Třídění Seminář IVT

  2. Definice • uspořádání skupiny dat (záznamů) dle daného klíče • vzestupně (od nejmenší do největší hodnoty klíče) • sestupně (od největší do nejmenší hodnoty klíče) • příklady • data žáků, pracovníků, … jistých osob dle • příjmení a jména (podle abecedy) – kombinovaný klíč • data narození • místa bydliště • knihy v knihovně dle • autora • žánru

  3. Druhy třídění • vnitřní • všechna tříděná data se vejdou do paměti • rychlost třídění závisí jen na počtu porovnání a výměn dat • vnější • data se do paměti nevejdou • třídí se po částech, setříděné části odkládají zpět do vnější paměti, pak se vše postupně slučuje • rychlost třídění závisí na počtu porovnání, výměn dat a přístupové rychlosti vnějších pamětí (disku)

  4. Metody • stabilní - zachovává vzájemné pořadí údajů se shodnými primárními klíči – tj. třídíme-li osoby dle příjmení a bude se vyskytovat více osob stejného příjmení, zachová se ve výsledku jejich pořadí dle původních dat • přirozená, pokud doba potřebná ke třídění již setříděné posloupnosti je menší než doba, potřebná pro setřídění náhodně uspořádané posloupnosti.

  5. Požadavky na algoritmus • jednoduchost • přirozenost • stabilita • časová složitost co možná nejmenší • paměťová náročnost

  6. Algoritmy s časovou složitostí O(N2) kvadratická složitost • Select Sort • Bubble Sort • Shaker Sort • Insert Sort třídíme v původní poli, nepotřebujeme další pomocné pole

  7. Select Sort Třídění výběrem– opakovaný výběr největšího (nejmenšího) prvku z dosud nesetříděné posloupnosti a jeho přehození s posledním (prvním) prvkem • průchod polem – v n-prvkovém poli najdeme maximum a prohodíme tento prvek s posledním n-tým prvkem • průchod polem –v poli s (n-1) prvky opět najdeme maximum a prohodíme tento prvek s posledním tj. (n-1). prvkem • průchod polem –v poli s (n-2) prvky opět najdeme maximum a prohodíme tento prvek s posledním tj. (n-2). prvkem … pokračujeme, dokud nezbude jen jediný prvek – ten už je na svém místě

  8. Select Sort Start i = n, n-1 … 2 Stop max = 1 j = 2, 3, … i tmp = A[i] A[i] = A[max] - A[j] > A[max] A[max] = tmp + max = j

  9. SelectSort procedure SelectSort ( var A: TPole ; N : word); var I, J, max : word; tmp : TPrvek; {typ prvku pole} begin for I := N downto 2 dobegin max := 1 ; for J := 2 to I do begin if A[J] > A[max] then max := J end; tmp := A[I]; A[I] := A[max]; A[max] := tmp end end;

  10. Bubble Sort třídění probubláváním – porovnávají se vždy prvky ležící vedle sebe – je-li levý prvek větší než pravý, prohodí se • průchod polem– n-prvkové pole – porovná se první prvek s druhým, je-li první větší než druhý, prohodí se. Porovná se druhý se třetím (event. se prohodí), třetí se čtvrtým …Touto cestou se na pozici posledního tj n. prvku dostane největší prvek • průchod polem – (n-1) prvkové pole – opět se porovnává první s druhým, druhý s třetím atd. na pozici (n-1). prvku se dostane – probublá – 2. největší prvek … pokračujeme, dokud nezbude jen jediný prvek – ten už je na svém místě Zkrácení algoritmu – kontrolujeme, zda došlo k výměně – pokud nikoliv, je celé pole setříděno!!!

  11. Bubble Sort – delší verze Start i = 1, 2 … n - 1 Stop j = 1, 2, … n - i - A[j] > A[j + 1] + tmp = A[j] A[j] = A[j+1] A[j+1] = tmp

  12. Bubble Sort procedure BubbleSort ( var A: TPole ; N : word); var I, J : word; tmp : TPrvek; begin for I := 1 to N - 1 do for J := 1 to N - i do if A[J] > A[J+1] thenbegin tmp := A[J]; A[J] := A[J+1]; A[J+1] := tmp end; end;

  13. Bubble Sort – zkrácená verze Start i = 1, 2 … n -1 Stop vymena = false j = 1, 2, … n - i - A[j] > A[j + 1] + - vymena Stop tmp = A[j] A[j] = A[j+1] A[j+1] = tmp + vymena = true

  14. Bubble Sort – zkrácená verze procedure BubbleSort ( var A: TPole ; N : word); var I, J : word; tmp : TPrvek; vymena : boolean; begin for I := 1 to N - 1 do begin vymena := false; for J := 1 to N - i dobegin if A[J] > A[J+1] thenbegin vymena := true; tmp := A[J]; A[J] := A[J+1]; A[J+1] := tmp end; end; ifnot vymena thenbreak; end; end;

  15. Shaker Sort třídění setřásáním – podobné jako BUBBLE SORT, ale střídavě se prochází oboustranně • průchod polem– zprava – porovná se poslední s předposledním, předposlední s předpředposledním … • průchod polem – zleva – porovnává se první s druhým, druhý s třetím atd. nyní máme na prvním a posledním místě správné prvky – nejmenší a největší pokračujeme v poli s n-2 prvky Zkrácení algoritmu – pamatujeme si, u jakého prvku došlo k výměně

  16. Shaker Sort – setřásání Start L=2 R = n L = L+1 1 j = R, R-1, … L j = L, L+1, … R R = R - 1 - A[j] < A[j - 1] - A[j] < A[j - 1] L > R - + + 1 + tmp = A[j] A[j] = A[j -1] A[j -1] = tmp tmp = A[j] A[j] = A[j -1] A[j -1] = tmp Stop

  17. Shaker Sort var I, J , L, R : word; tmp : TPrvek; begin L := 2; R := N; repeat for J := R downto L do begin if A[J-1] > A[J] thenbegin tmp := A[J-1]; A [J-1] := A[J]; A[J] := tmp; end; end; L := L+1; for J := L to R do if A[J-1] >A[J] thenbegin tmp :=A[J-1]; A[J-1] := A[J]; A[J] := tmp; end; end; R := R - 1; until L > R end;

  18. Shaker Sort – setřásání zkráceně Start L=2 R = n K = n L = K+1 1 j = R, R-1, … L j = L, L+1, … R R = K - 1 - A[j] < A[j - 1] - A[j] < A[j - 1] L > R - + + 1 + tmp = A[j] A[j] = A[j -1] A[j - 1] = tmp K = j tmp = A[j] A[j] = A[j - 1] A[j -1] = tmp K = j Stop

  19. Shaker Sort - zkráceně var I, J , L, R, K : word; tmp : TPrvek; begin L := 2; R := N; repeat for J := R downto L do begin if A[J-1] > A[J] thenbegin tmp := A[J-1]; A [J-1] := A[J]; A[J] := tmp; K := J ; end; end; L := K+1; for J := L to R do if A[J-1] >A[J] thenbegin tmp :=A[J-1]; A[J-1] := A[J]; A[J] := tmp; K := J ; end; end; R := K - 1; until L > R end;

  20. Insert Sort třídění zatřiďováním – jednotlivé prvky se postupně zatřiďují do již setříděné části pole • zatřiďování z pravého konce setříděného pole (se zarážkou – nárazníkem) • binární zatřiďování

  21. Insert Sort Start i = 2, 3 … n Stop X = A[i] A[0] = X j = i - 1 X < A[j] - A[j+1] = X + A[j+1] = A[J] j = j – 1

  22. Insert Sort procedureInsertSort ( var A: TPole ; N : word); var I,J : word; X : TPrvek; begin for I := 2 to N dobegin X := A[I]; A[0] := X; J := I-1; while X<A[J] dobegin A[J+1] := A[J]; J := J-1 end; A[J+1] := X end end;

  23. Binary Insert Sort Start i = 2, 3 … n Stop X = A[i] j = i, i - 1 … L+1 L = 1 R = i – 1 A[j] = A[j-1] M = int(L + R)/2 X < A[M] - A[L] =X L = M + 1 + R = M – 1 + - L >R

  24. Binary Insert Sort - složitost n.log(n) procedure BinaryInsertSort(var A : TPole ; N : word) ; var i, j, L, R, M: word; X : TPrvek; begin for i := 2 to N dobegin X := A[i]; L:= 1; R:= i-1; whileL <= Rdobegin M:= (L + R) div 2; if X < A[M] then R:= M - 1 else L:= M + 1; end; for j := idowntoL + 1do A[j] := A[j - 1]; A[L] := X; end end;

More Related