Я хочу отсортировать символы в строке с помощью пузырьковой сортировки. Что не так с этим кодом? - PullRequest
0 голосов
/ 09 сентября 2018
/* 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;

Это вывод, который я получаю -

Введите строку: компьютер

Итерация 1 cmoputer

Итерация 2 cmoputer

Итерация 3 cmoputer

Итерация 4 cmoputer

Итерация 5 cmoputer

Итерация 6 cmoputer

Итерация 7 cmoputer

Пожалуйста, исправьте код и сообщите мне ошибку. Спасибо!

Ответы [ 4 ]

0 голосов
/ 09 сентября 2018

Условие i < (size-1-i) равно 2 * i < size - 1, также равно i < (size - 1) / 2.

Как следствие, этот цикл повторяет только половину слова.

Это должно быть либо i < size - 1, либо i < size - 1 - j (небольшая оптимизация, на самом деле не нужна, если вы хотите оптимизировать, вы не разбираетесь с пузырьками)

0 голосов
/ 09 сентября 2018

Во внутреннем цикле for измените условие на (size-j-1).

0 голосов
/ 09 сентября 2018

Вы сделали глупую ошибку во втором * внутреннем цикле условие завершения . Вам следует изменить второй цикл следующим образом: for(i=0; i<(size-1-j); i++).

0 голосов
/ 09 сентября 2018

Это

size-1-i

сканировать только половину слова "cmoputer".
Эта половина уже отсортирована.

Изменить на

size-1-j
...