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;
}
}
}
}