SHELLSORT
PROBLÉM
Je dáno pole 
A. obsahující 
N prvků. Výsledkem třídění v místě  je přerovnání prvků pole 
A. takovým způsobem, že platí 
A.1<=A.2<=...<=A.N
   
ALGORITMUS
Nejprve přerovnáme prvky pole aby všechny prvky s posunutím 
H.1  byly utříděné. Pak je přerovnáme tak, aby byly utříděné prvky s posunutím 
H.2 (
H.1>H.2) atd. až nakonec utřídíme celé pole (tj. utřídíme všechny prvky s posunutím jedna).  D. L. Shell, autor algoritmu, doporučil počáteční volbu 
H=N%2 a dále pak užití vzorce 
H=H%2. Posloupnost 
H., která se v praxi nejlépe osvědčuje, je  
H=...,1093,364,121,40,13,4,1
 tj. H = (3**K-1)/2, generováno vzorcem H=3*H+1 s počáteční hodnotou H=1. Časová složitost tohoto algoritmu je v nejhorším případě O(N**(3/2); v průměru pak O(N**1.25).  
   
PRAXE
Následující tabulka porovnává 4 algoritmy třídění. Pole A. obsahuje celá čísla z intervalu 1 až Max, kde Max=10,100,1000,40000.
 
| Doba výpočtu v sekundách pro N=10 000 |  
| Algoritmus | 
Max = 100 | 
Max = 1000 | 
Max = 40000 | 
Max = 99999 | 
| QUICKSORT | 
4.66  | 
4.53  | 
4.89  | 
4.59  | 
| HEAPSORT | 
10.26  | 
10.67  | 
11.58  | 
11.18  | 
| SHELLSORT | 
 7.45  | 
 8.89  | 
10.58  | 
10.13  | 
| COUNTING_SORT | 
 1.88  | 
 1.95  | 
 7.93  | 
31.85  | 
 
IMPLEMENTACE
Jednotka: nerekurzívní vnitřní podprogram
 
Globální proměnné: pole A. libovolných prvků
 
Parametr: přirozené číslo N - počet prvků v poli A.
 
Výsledek: Přeuspořádá vstupní pole tak, že platí 
A.1<=A.2<=...<=A.N
 
 SHELLSORT: procedure expose A.
 parse arg N
 H = 1
 do until H > N; H = 3 * H + 1; end
 do until H = 1
   H = H % 3
   do I = H + 1 to N
     V = A.I; J = I; JmH = J - H
     do while A.JmH > V
       A.J = A.JmH; J = J - H
       if J <= H then leave
       JmH = J - H
     end
     A.J = V
   end 
 end
 return
 
  | 
 
SOUVISLOSTI
Literatura
Rich R. P. Internal Sorting Methods Illustrated with PL/1 Programs
 Prentice Hall, Inc., Engelwood Cliffs, 1972
Sedgewick R. Algorithms
 Addison-Wesley, Reading, Massachusetts, 1984
Poděkování
Změnil jsem test z Max=10 ... 40000 na Max=100  ... 99999. Díky za nápad patří Walteru Pachlovi z Vídně.
Poznámka
Tento test běžel v prostředí Windows 2000 Professional na počítači se 132MB RAM a procesorem typu x86Family 6 Mode 6 Stepping 5.