我无法在下面的愚蠢的递归冒泡排序代码中找到错误。有人能说出为什么它不能正常工作吗?提前谢谢。
#include <stdio.h>
int b[8] = { -9, 9, 89, 78, 56, 45, 34, 89 };
void print(int n)
{
int i;
for (i = 0; i < n; i++)
printf("%d\t", b[i]);
printf("\n");
}
void rb(int n)
{
if(n == 0)
return;
int i, j;
for (i = 0; i < n - 1; i++) {
if (b[i + 1] > b[i])
j = b[i + 1];
b[i + 1] = b[i];
b[i] = j;
}
rb(n - 1);
}
int main()
{
print(8);
rb(8);
print(8);
return 0;
}
答案 0 :(得分:2)
for循环中的if语句实际上如下所示,需要在执行交换的三行代码中添加“{”和“}”。此外,因为j仅用于代码的交换部分。如果你在'if'块内部设置了'j'。编译器会发现这个问题。
void rb(int n)
{
if(n==0)
return;
int i;
for(i=0;i<n-1;i++)
{
if(b[i+1]>b[i]) {
/* swap the two values and scope j as tightly as possible */
int j=b[i+1];
b[i+1]=b[i];
b[i]=j;
}
}
rb(n-1);
}
答案 1 :(得分:1)
如果你将函数rb()更改为下面的代码,它对我有用,从最大到最小排序。
void rb(int n)
{
if(n == 0)
return;
for (int i = 0; i < n - 1; i++) {
if (b[i + 1] > b[i]) {
int j = b[i + 1];
b[i + 1] = b[i];
b[i] = j;
}
}
rb(n - 1);
}
输出:
-9 9 89 78 56 45 34 89
89 89 78 56 45 34 9 -9
答案 2 :(得分:1)
您的陈述需要修复。
for (i = 0; i < n - 1; i++) {
if (b[i + 1] > b[i]) {
j = b[i + 1];
b[i + 1] = b[i];
b[i] = j;
}
}