Hledat:

Invia.cz Last minute Tunisko Dovolená v Chorvatsku Pojeďte do Egypta Bulharsko Vydělávejte peníze s INVIA.CZ
 

Quicksort

Quicksort v akci na několika náhodných číslech. Horizontální hodnoty jsou pivoty
Quicksort v akci na několika náhodných číslech. Horizontální hodnoty jsou pivoty

Quicksort neboli rychlé (rekurzivní) řazení do tříd je jeden z nejrychlejších známých algoritmů řazení založených na porovnávání prvků. Jeho průměrná časová složitost je pro algoritmy této skupiny nejlepší možná (O(N log N)), v nejhorším případě (kterému se ale v praxi jde obvykle vyhnout) je však jeho časová náročnost O(N²). Další výhodou algoritmu je jeho jednoduchost.

Obsah

[editovat] Algoritmus

Algoritmus v akci na několika náhodných číslech. Zvýrazněné hodnoty jsou pivoty, modré jsou menší nebo stejné a červené jsou větší
Algoritmus v akci na několika náhodných číslech. Zvýrazněné hodnoty jsou pivoty, modré jsou menší nebo stejné a červené jsou větší

Základní myšlenkou quicksortu je rozdělení řazené posloupnosti čísel na dvě přibližně stejné části (quicksort patří mezi algoritmy typu rozděl a panuj). V jedné části jsou čísla větší a ve druhé menší, než nějaká zvolená hodnota (nazývaná pivot). Pokud je tato hodnota zvolena dobře, jsou obě části přibližně stejně velké. Pokud budou obě části samostatně seřazeny, je seřazené i celé pole. Obě části se pak rekurzivně řadí stejným postupem.

[editovat] Volba pivota

Největším problémem celého algoritmu je volba pivota. Pokud se daří volit číslo blízké mediánu řazené části pole, je algoritmus skutečně velmi rychlý. V opačném případě se jeho časová složitost blíží O(N2). Přirozenou metodou na získání pivota se pak jeví volit za pivot medián. Hledání mediánu (a obecně k-tého prvku) v posloupnosti běží v lineárním čase k počtu prvků, tím dostaneme složitost O(Nlog2N) v nejhorším případě. Nicméně tato implementace není příliš rychlá z důvodu vysokých konstant schovaných v O notaci. Proto existuje velké množství alternativních způsobů, které se snaží efektivně vybrat pivota co nejbližšího mediánu. Zde je seznam některých metod:

Přestože Quicksort nemá zaručenou časovou složitost O(N log2 N)), reálné aplikace a testy ukazují, že na pseudonáhodných datech je vůbec nejrychlejší ze všech obecných řadicích algoritmů (tedy i rychlejší než Heapsort a Mergesort, které jsou formálně rychlejší). Maximální časová náročnost O(N²) ho však diskvalifikuje pro použití v kritických aplikacích.

[editovat] Kód algoritmu v jazyce Pascal

procedure quicksort (l,r : integer);
var i,j,x,w : integer;                    
begin
  i:=l; j:=r;
  x:=akt[(l+r) div 2];
  repeat
    while akt[i] < x do i:=i+1;
    while x < akt[j] do j:=j-1;
    if i <= j then begin
      w:=akt[i];
      akt[i]:= akt[j];
      akt[j]:=w;
      i:=i+1; j:=j-1
    end
  until i > j;
  if l < j then quicksort(l,j);
  if i < r then quicksort(i,r)
end;

[editovat] Externí odkazy


 
Quicksort v jiných jazycích: العربية, Български, বাংলা, Català, Deutsch, English, Español, فارسی, Suomi, Français, עברית, Magyar, Íslenska, Italiano, 日本語, 한국어, Lietuvių, Nederlands, ‪Norsk (bokmål)‬, Polski, Português, Română, Русский, Slovenčina, Slovenščina, Српски / Srpski, Svenska, Türkçe, Українська, O'zbek, Tiếng Việt, 中文
Tento článek je převzat z české wikipedie - otevřené encyklopedie, originální článek naleznete na adrese: „http://cs.wikipedia.org/wiki/Quicksort
Stránka byla naposledy upravena v Stránka byla naposledy editována 29. 8. 2008 v 23:29.
Veškerý text je dostupný za podmínek GNU Free Documentation License (Autorské právo pro podrobnosti).
Další služby: Portál | Katalog | Hledej | Zprávy | Počasí | Kurzy | Práce | Slovník | TV | Online hry | Java hry | SMS | Loga a melodie | Chat | Fórum | Kontakt