Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: gibranini en 2 Agosto 2014, 05:40 am



Título: ayuda con el shell sort c++
Publicado por: 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,

Código:
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;
    }


Título: Re: ayuda con el shell sort c++
Publicado por: A.I. en 2 Agosto 2014, 10:56 am
Código
  1. fact = 3/4;

Probablemente te esté dando 0.

Código
  1. fact = (float) 3/4;

El algoritmo así visto por encima parece correcto.


Título: Re: ayuda con el shell sort c++
Publicado por: gibranini en 2 Agosto 2014, 23:55 pm
Código
  1. fact = 3/4;

Probablemente te esté dando 0.

Código
  1. fact = (float) 3/4;

El algoritmo así visto por encima parece correcto.

entonces poniendo

Código
  1. fact = (float) 3/4;

deberia funcionar? por que sigue sin ordenar :-(


Título: Re: ayuda con el shell sort c++
Publicado por: kutcher en 3 Agosto 2014, 02:01 am
Hola gibranini los números 3, 4, 6 de donde los sacaste

Saludos..


Título: Re: ayuda con el shell sort c++
Publicado por: gibranini en 3 Agosto 2014, 03:04 am
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


Título: Re: ayuda con el shell sort c++
Publicado por: Blaster en 3 Agosto 2014, 03:33 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:

Código
  1. void shell_sort (int *arreglo, int n)
  2. {
  3.    int i, j, aux, inc;
  4.    inc = n/2-1;
  5.  
  6.    while(inc > 0)
  7.    {
  8.        i = 0;
  9.        while(i < n)
  10.        {
  11.            j = i, aux = arreglo[i];
  12.            while (j >= inc && arreglo[j-inc] > aux)
  13.            {
  14.                arreglo[j] = arreglo[j-inc];
  15.                j = j-inc;
  16.            }
  17.            arreglo[j] = aux, i++;
  18.        }
  19.        inc = inc/2;
  20.    }
  21. }

Edite el código anterior ya que me di cuenta de un error


Título: Re: ayuda con el shell sort c++
Publicado por: A.I. en 3 Agosto 2014, 04:39 am
entonces poniendo

Código
  1. fact = (float) 3/4;

deberia funcionar? por que sigue sin ordenar :-(

Sí que lo ordena.

Código
  1. $ gcc shellsort.c -o shellsort
  2. $ ./shellsort
  3. 3 34 1 53 15 6 9
  4. 1 3 6 9 15 34 53



Título: Re: ayuda con el shell sort c++
Publicado por: leosansan en 3 Agosto 2014, 04:45 am
Sí que lo ordena.

Código
  1. $ gcc shellsort.c -o shellsort
  2. $ ./shellsort
  3. 3 34 1 53 15 6 9
  4. 1 3 6 9 15 34 53


Totalmente de acuerdo con A.I. :

Código
  1. 3   34    1   53   15    6    9
  2. 1    3    6    9   15   34   53
  3.  
  4. Process returned 0 (0x0)   execution
  5. Press any key to continue.

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/simba2.gif)


Título: Re: ayuda con el shell sort c++
Publicado por: gibranini en 3 Agosto 2014, 23:15 pm
Sí que lo ordena.

Código
  1. $ gcc shellsort.c -o shellsort
  2. $ ./shellsort
  3. 3 34 1 53 15 6 9
  4. 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


Título: Re: ayuda con el shell sort c++
Publicado por: leosansan en 3 Agosto 2014, 23:52 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:

Código
  1. fact = 3/4 =  0

Puedes evitarlo como te dijo A.I. :

Código
  1. fact = (float) 3/4 =  0.75

O más simple:

Código
  1. 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)


Título: Re: ayuda con el shell sort c++
Publicado por: gibranini en 5 Agosto 2014, 00:17 am
MUCHAS GRACIAS  ;D :D :D :D