我想使用冒泡排序对字符串中的字符进行排序。这段代码有什么问题?

I want to sort the characters in a string using bubble sort. What is wrong with this code?

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

/* finds length of the string */
while(s[size]!='[=10=]')
{
    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 计算机

迭代 2 计算机

迭代 3 计算机

迭代4 计算机

迭代 5 计算机

迭代 6 计算机

迭代 7 计算机

请更正代码并告诉我错误。谢谢!

这个

size-1-i

只扫描到单词的一半 "cmoputer"。
那一半已经排序了。

改为

size-1-j

在内部for循环中,将条件更改为(size-j-1)

你在第二个内部循环的终止条件中犯了一个愚蠢的错误。 您应该将第二个循环更改为以下内容:for(i=0; i<(size-1-j); i++).

条件i < (size-1-i)等于2 * i < size - 1,也等于i < (size - 1) / 2.

因此,该循环只迭代了一半的单词。

这应该是i < size - 1,或者i < size - 1 - j(轻微优化,不是很必要,如果你想优化,你不要冒泡排序)