【问题标题】:I want to sort the characters in a string using bubble sort. What is wrong with this code?我想使用冒泡排序对字符串中的字符进行排序。这段代码有什么问题?
【发布时间】:2019-02-13 22:57:54
【问题描述】:
/* 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 电脑

迭代 2 电脑

迭代 3 电脑

迭代 4 电脑

迭代 5 电脑

迭代 6 电脑

迭代 7 电脑

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

【问题讨论】:

  • 请解释这个size-1-i。试试j
  • 我认为使用while swapped 条件而不是loop n times 来理解冒泡排序更简单。
  • 谢谢你们的投入!纠正了错误,现在可以正常工作了... :)

标签: c string bubble-sort


【解决方案1】:

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

【讨论】:

  • 请解释您的答案与旧评论和旧答案相比增加的洞察力。
【解决方案2】:

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

【讨论】:

  • 请解释您的答案与旧评论和旧答案相比增加的洞察力。
【解决方案3】:

条件i &lt; (size-1-i)等于2 * i &lt; size - 1,也等于i &lt; (size - 1) / 2

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

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

【讨论】:

    【解决方案4】:

    这个

    size-1-i
    

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

    改成

    size-1-j
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 2016-02-09
      • 2022-07-16
      • 2021-08-13
      • 2017-04-14
      相关资源
      最近更新 更多