我想使用冒泡排序对字符串中的字符进行排序。这段代码有什么问题?
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
(轻微优化,不是很必要,如果你想优化,你不要冒泡排序)
/* 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
(轻微优化,不是很必要,如果你想优化,你不要冒泡排序)