[英]Bubble sort using recursive function in C
当我调用冒泡排序递归函数时,数组没有被排序。
#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)
),您将到达函数的末尾,而无需进一步*(arr+vidx) <= *(arr+vidx+1)
,过早停止排序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.