gpt4 book ai didi

c - 在 C 中使用递归函数进行冒泡排序

转载 作者:太空宇宙 更新时间:2023-11-04 07:50:35 24 4
gpt4 key购买 nike

当我调用冒泡排序递归函数时,数组没有排序。

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

body 的大部分bubble函数无法访问。

编辑:顺便说一下,我注意到剩下的两个错误:

  • vidx可以达到数组的长度,所以 vidx+1将索引结束,这可能会导致问题
  • 当您命中两个彼此顺序正确的相邻元素时(即 *(arr+vidx) <= *(arr+vidx+1) ),您将到达函数的末尾而无需进一步递归,从而过早地停止排序。

关于c - 在 C 中使用递归函数进行冒泡排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54155638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com