PDA

Visualizza la versione completa : [c] shellsort


inform@tic@p@zz
01-04-2005, 18:03
eccone un altro.. 'tradotto' fedelmente dal Pascal, ovviamente mi da problemi nell'ordinamento..


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

infinitejustice
01-04-2005, 18:23
void Shellsort(int *array, int nr){

int i, j, k, dist, distArray[3], temp;
*(distArray)=3; *(distArray+1)=2; *(distArray+2)=1;


for(k=0; k < 3; k++){
dist = *(distArray+k);
for(i = dist; i < nr; i++){
temp = *(array+i);
for(j = i - dist; (temp < *(array+j)) && (j >= 0); j = j - dist)
*(array+(j+dist)) = *(array+j);
*(array+(j+dist)) = temp;
}
}

for(i = 0; i < nr; i++)
printf("%d ", *(array+i));
}

array il vettore da ordinare, nr il numero di elementi

inform@tic@p@zz
02-04-2005, 00:17
perdonami, ma quello che hai postato tu non ha attinenza col mio.. io avrei proprio bisogno che mi si trovasse l'errore nel mio, se possibile. grazie cmq. :ciauz:

inform@tic@p@zz
04-04-2005, 01:08
allora? non mi aiuta nessuno? :messner:

Loading