Shell Sort - ricorsiva -


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)
I nostri contenuti sono creati in collaborazione con esperti di high-tech, sotto la direzione di Jean-François Pillou, fondatore di CCM.net. CCM è un sito di high-tech leader a livello internazionale ed è disponibile in 11 lingue.
Il documento intitolato « Shell Sort - ricorsiva - » dal sito 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.
Unisciti ALLA COMMUNITY
Potrebbe anche interessarti