当我调用bubble sort时有一个问题递归函数数组没有被排序。
#include"stdio.h"
void bubble(int *arr,int n,int vidx){
if(n==0)
return;
if(vidx == n)
bubble(arr,n-1,0);
return;
if(*(arr+vidx) > *(arr+vidx+1)){
int temp = *(arr+vidx);
*(arr+vidx) = *(arr+vidx+1);
*(arr+vidx+1) = temp;
bubble(arr,n,vidx+1);
return;
}
} int main(){
int a[] = {5,4,3,2,1};
bubble(&a,5,0);
for(int i = 0 ; i < 5 ; i++)
printf("%d,",a[i]);
return 0; }
实际产量:5,4,3,2,1,
预期产量:1,2,3,4,5,
最佳答案
if(vidx == n)
bubble(arr,n-1,0);
return;
这就是为什么我提倡使用牙套。实际上,该代码相当于:
if(vidx == n){ bubble(arr,n-1,0); }
return;
bubble
函数的主体大部分是不可访问的。编辑:顺便说一下,我注意到剩下的两个错误:
vidx
可以增加到数组的长度,因此vidx+1
将索引超过结尾,这可能会导致问题当您击中两个相邻的元素时,它们彼此之间的顺序是正确的(即
*(arr+vidx) <= *(arr+vidx+1)
),您将使其到达函数的末尾,而不再递归,从而过早地停止排序。