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;
}
这个代码在完成冒泡排序后会在这两处来回跳跃,为什么会这样呢?
答
这个是递归写法,程序运行到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行反复跳跃