C中的递归冒泡排序

时间:2013-11-15 20:16:06

标签: c sorting recursion bubble-sort

我无法在下面的愚蠢的递归冒泡排序代码中找到错误。有人能说出为什么它不能正常工作吗?提前谢谢。

#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;
}

3 个答案:

答案 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;
        }
    }