Shell Sort - ricorsiva -

Dicembre 2016


Ecco una procedura che può ordinare un array di n interi utilizzando il metodo Shell Sort:

Procedure Shell_Sort_Rec (Var t: TAB; n,h : integer);   
Var aux,i : integer;
begin
If h > 0 Then
Begin
If n > h Then
begin
Shell_Sort_Rec (t,n - h,h);
If t[n] < t[n - h] Then
Begin
aux:= t[n];
i := n;
Repeat
t[i] := t[i - h];
i := i - h;
Until (i = h) Or (aux > t[i - h]);
t[i] := aux;
End;
End;
Shell_Sort_Rec (t,n,h Div 3);
End;
End;


Nota:
  • Prova questa procedura su array di piccole dimensioni, perché in caso contrario il numero di chiamate sarà importante e cosi avremo il problema di stack overflow (il limite tecnico della ricorsione è la memoria).
  • È possibile aumentare la dimensione della tabella di prova, aumentando la dimensione dello stack (Opzione > Compiler > Impostazioni di memoria > dimensione di stack)

Potrebbe anche interessarti :
Il documento intitolato « Shell Sort - ricorsiva - » da CCM (it.ccm.net) è reso disponibile sotto i termini della licenza Creative Commons. È possibile copiare, modificare delle copie di questa pagina, nelle condizioni previste dalla licenza, finché questa nota appaia chiaramente.