hola estoy tratando de hacer el método de ordenamiento Shell Sort pero cuando lo ejecuto no me ordena nada y sigue igual,
int arreglo[7]={3, 34, 1, 53, 15, 6, 9};
int i, dif, aux;
float fact;
fact= 3/4;
dif= 6 * fact;
while(dif > 0)
{
i= 0;
while(i <= 6-dif)
{
if(arreglo[i] > arreglo[i+dif])
{
aux=arreglo[i];
arreglo[i]=arreglo[i+dif];
arreglo[i+dif]=aux;
}
i++;
}
dif=dif * fact;
}
fact = 3/4;
Probablemente te esté dando 0.
fact = (float) 3/4;
El algoritmo así visto por encima parece correcto.
Cita de: A.I. en 2 Agosto 2014, 10:56 AM
fact = 3/4;
Probablemente te esté dando 0.
fact = (float) 3/4;
El algoritmo así visto por encima parece correcto.
entonces poniendo
fact = (float) 3/4;
deberia funcionar? por que sigue sin ordenar :-(
Hola gibranini los números 3, 4, 6 de donde los sacaste
Saludos..
el 3/4, lo hice para dividir el arreglo y asi comparar/ordenar por separado, y el 6 es el tamaño del arreglo -1
Cita de: gibranini en 2 Agosto 2014, 05:40 AM
hola estoy tratando de hacer el método de ordenamiento Shell Sort pero cuando lo ejecuto no me ordena nada y sigue igual,
Trato de respetar lo máximo posible la estructura de tu código:
Edito:
void shell_sort (int *arreglo, int n)
{
int i, j, aux, inc;
inc = n/2-1;
while(inc > 0)
{
i = 0;
while(i < n)
{
j = i, aux = arreglo[i];
while (j >= inc && arreglo[j-inc] > aux)
{
arreglo[j] = arreglo[j-inc];
j = j-inc;
}
arreglo[j] = aux, i++;
}
inc = inc/2;
}
}
Edite el código anterior ya que me di cuenta de un error
Cita de: gibranini en 2 Agosto 2014, 23:55 PM
entonces poniendo
fact = (float) 3/4;
deberia funcionar? por que sigue sin ordenar :-(
Sí que lo ordena.
$ gcc shellsort.c -o shellsort
$ ./shellsort
3 34 1 53 15 6 9
1 3 6 9 15 34 53
Cita de: A.I. en 3 Agosto 2014, 04:39 AM
Sí que lo ordena.
$ gcc shellsort.c -o shellsort
$ ./shellsort
3 34 1 53 15 6 9
1 3 6 9 15 34 53
Totalmente de acuerdo con A.I. :
3 34 1 53 15 6 9
1 3 6 9 15 34 53
Process returned 0 (0x0) execution
Press any key to continue.
¡¡¡¡ Saluditos! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/simba2.gif)
Cita de: A.I. en 3 Agosto 2014, 04:39 AM
Sí que lo ordena.
$ gcc shellsort.c -o shellsort
$ ./shellsort
3 34 1 53 15 6 9
1 3 6 9 15 34 53
tienes razon :) gracias, pero me puedes explicar por que razo se necesitaba poner el (float), porfavor :D ;D
Cita de: gibranini en 3 Agosto 2014, 23:15 PM
tienes razon :) gracias, pero me puedes explicar por que razo se necesitaba poner el (float), porfavor :D ;D
Porque como tan acertadamente te comentó
A.I. 3/4 es una división entre enteros con lo que el resultado es cero:
fact = 3/4 = 0
Puedes evitarlo como te dijo A.I. :
fact = (float) 3/4 = 0.75
O más simple:
fact = 3./4 = 0.75
Fíjate en la presencia del punto decimal en el tres que indica que se va a realizar una operación entre números en flotante.
¡¡¡¡ Saluditos! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
MUCHAS GRACIAS ;D :D :D :D