codice:
void sh_sort(float *A, int n){
int current, previous, inc, j, k, x, inserted;

inc = n;
  while (inc>1){
    inc = inc / 2;
        for (j=1; j<=inc-1; j++){
                k = j + inc;
                      while(k<=n){
                           inserted = 0; // non entrerà mai nel while...
                           x = A[k];
                           current = k;
                           previous = current - inc;
                                 while(previous>=j && inserted==1){ // <-- questo while
                                       if (x<A[previous]){
                                           A[current] = A[previous];
                                           current = previous;
                                           previous = previous - inc;
                                       } else {
                                           inserted = 1;
                                       }
                                 }
                           A[current] = x;
                           k = k + inc;             
                      }
        }                     
  }
}
codice:
float *shellsort(float *f, int n)
{                                           
   int i, j, p;
   float x;                           
   p = n/2;                                 
 
   while (p>0)                              
   {
       for (i = 0; i < n; i++)             
       {
           j = i;
           x = f[i];                      
           while ((j >= p) && (f[j-p] > x))
           {                                
               f[j] = f[j-p];               
               j = j - p;                     
           }
           f[j] = x;                      
       }
       p = p/2;                             
    }
    return f;   
}