c语言代码问题,冒泡排序题

c语言代码问题,冒泡排序题

问题描述:

`

void maopao(int arr[],int sz)
{
    int i = 0;
    int w = 0;
    if (sz!=1)
    {
        for (i = 0; i < sz - 1; i++)
        {
            if (arr[i] > arr[i + 1])
            {
                w = arr[i];

                arr[i] = arr[i + 1];
                arr[i + 1] = w;
            }
        }
        maopao(arr, sz - 1);
    }
    else
        ;
}

int main()
{
    int arr[10] = {9,8,7,6,5,4,3,2,1,0};
    int sz = sizeof(arr) / sizeof(arr[0]);
    maopao(arr, sz);
    printf("%d",arr[9]);
    return 0;
}

这个代码在完成冒泡排序后会在这两处来回跳跃,为什么会这样呢?

img

这个是递归写法,程序运行到17行会进入第2层maopao方法,在第2层里运行到17行时又会进入第3层,以此类推会有多层,假设第四层sz=1,那么不会进入第5层,而是运行19行到21行,第4层结束,实际上也是第3层的17行语句完成,所以下一步运行第3层的21行,第3层结束,第2层的17行完成,运行第2层的21行,第2层结束,第1层的71行完成,运行第1层的21行,第一层结束,返回main函数……所以最后看起来就是在17行和21行反复跳跃