eccone un altro.. 'tradotto' fedelmente dal Pascal, ovviamente mi da problemi nell'ordinamento..

codice:
#include<stdio.h>
#include<stdlib.h>

void shell_sort(int *, int);

int main() 
  {
    int *vet, n, i;
    
    printf("Quanti elementi vuoi inserire nell'array?: ");
    scanf("%d", &n);
    printf("\n");
    
    vet = (int *) malloc (n*sizeof(int));

    for(i = 0; i < n; i++)
      {
        printf("Inserisci il %d elemento dell'array: ", i+1);
        scanf("%d", &vet[i]);
      }

    printf("\nGli elementi inseriti nell'array sono: ");
      
    for(i = 0; i < n; i++)
      printf("%d ", vet[i]);
	
    printf("\n");

    shell_sort(vet, n);

    printf("\nL'array ordinato e' il seguente: ");
    
    for(i = 0; i < n; i++)
        printf("%d ", vet[i]);
    printf("\n\n");
    system("pause");
    return 0;
 }


void shell_sort(int *vet, int n)
 {
  int inc = n, corr, prec, j, k, x;
  bool inserito;

  while (inc > 1 )
   {
    inc = inc % 2;
    for (j = 0; j < inc; j++)
     {
      k = j + inc;
      while (k <= n)
       {
        inserito = false;
        x = vet[k];
        corr = k;
        prec = corr - inc;
        while ((prec >= j) && (!inserito))
         {
          if (x < vet[prec])
           {
            vet[corr] = vet[prec];
            corr = prec;
            prec = prec - inc;
           }
          else 
            inserito = true;
         }
         vet[corr] = k;
         k = k + inc;
         }
        }
    }
 }