Shell Sort - ricorsiva -

Fai una domanda

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)
Jean-François Pillou

I nostri contenuti sono creati in collaborazione con esperti di high-tech, sotto la direzione di Jean-François Pillou, fondatore di CCM.net e digital director del Gruppo Figaro. CCM è un sito di high-tech leader a livello internazionale ed è disponibile in 11 lingue.

Scopri di più sul team CCM

Potrebbe anche interessarti