/* gets a string */
printf("Enter the string: ");
scanf("%s", s);

/* finds length of the string */
while(s[size]!='\0')
{
    size++;
}

/* sorts the elements of the string using bubble sort */
for(j=0; j<size-1; j++)
{
    for(i=0; i<(size-1-i); i++)
    {
        if(s[i]>s[i+1])
        {
            temp=s[i];
            s[i]=s[i+1];
            s[i+1]=temp;
        }
    }

    /* displays pass by pass output */
    printf("\nIteration %d\n", j+1);
    printf("%s\n", s);
}

return 0;

Este es el resultado que estoy obteniendo:

Ingrese la cadena: computadora

Iteración 1 computadora

Computadora Iteration 2

Computadora Iteration 3

Iteración 4 computadora

Computadora Iteration 5

Computadora Iteration 6

Computadora Iteration 7

Corrige el código y dime el error. ¡Gracias!

0
Kartik P. 9 sep. 2018 a las 09:41

4 respuestas

La mejor respuesta

Éste

size-1-i

Escanee solo a la mitad de la palabra "computadora". Esa mitad ya está ordenada.

Cambiar a

size-1-j
0
Yunnosch 9 sep. 2018 a las 06:56

La condición i < (size-1-i) es igual a 2 * i < size - 1, también igual a i < (size - 1) / 2.

Como consecuencia, ese ciclo solo itera más de la mitad de la palabra.

Esto debería ser i < size - 1 o i < size - 1 - j (ligera optimización, no realmente necesaria, si quieres optimizar, no haces burbujas)

1
Maxime Chéramy 9 sep. 2018 a las 07:13

Has cometido un error tonto en la condición de terminación del segundo bucle interno. Debe cambiar el segundo ciclo a lo siguiente: for(i=0; i<(size-1-j); i++).

1
BishalG 9 sep. 2018 a las 07:04

En el bucle for interno, cambie la condición a (size-j-1).

1
Observer 9 sep. 2018 a las 06:56