【问题标题】:Bubble sort on string对字符串进行冒泡排序
【发布时间】:2015-08-19 19:36:04
【问题描述】:
 #include<conio.h>
 #include<stdio.h>

 int main(void)
 {
     int i,j,temp;
     char str[]="geeksforgeeks";
     for(i=1;str[i];i++)
     {
         for(j=0;str[j]!='\0';j++)
         {
             if(str[j]>str[j+1])
             {
                 temp=str[j];
                 str[j]=str[j+1];
                 str[j+1]=temp;
             }      
         }
     }
     for(i=0;str[i]!='\0';i++)
     {
         printf("%c",str[i]);
     }
}

我希望它在不计算字符串长度的情况下完成。我知道错误在 for 循环的条件语句中,然后告诉我它应该是什么?

【问题讨论】:

  • 错误!! if(str[j]&gt;str[j+1]) 是最后一个元素的 UB。
  • 您还应该提供一个示例测试用例(输入和输出)。或者如果代码崩溃告诉我们错误信息!这将有助于更好地了解问题所在:)
  • 目前非常不清楚您要问什么,以及您要做什么。解释你正在尝试做什么,出了什么问题,以及为什么你知道这是错误的。然后问一个明确的问题。通过这样做,你会产生更多的帮助意愿,因为我们都想提供帮助,但我们不想永远花时间弄清楚你想要什么。
  • 我想在不计算字符串长度的情况下使用冒泡排序对字符串进行排序
  • .. 完善我之前的评论,不是完全 UB,而是与字符串终止符进行比较。

标签: c algorithm sorting


【解决方案1】:

正如 Weather Vane 已经指出的那样,错误位于 str[j]&gt;str[j+1]。这将使用 NULL 终止符切换倒数第二个字符(从而导致您错过 for 循环的结束条件)。

要解决此问题,请将 for 循环结束条件更改为 str[j+1]!='\0' 并在开头添加检查以确保数组中的第一个字符不是 '\0'!我还建议研究气泡搜索,因为这段代码有很多额外的迭代!

【讨论】:

  • 是的,我认为最好定义一个变量,当没有交换时,在嵌套循环之后我们应该打破循环以减少迭代
猜你喜欢
  • 1970-01-01
  • 2018-09-22
  • 2016-02-09
  • 2017-04-14
  • 1970-01-01
  • 2021-08-13
  • 2015-04-17
  • 1970-01-01
  • 2020-04-21
相关资源
最近更新 更多