当我调用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)),您将使其到达函数的末尾,而不再递归,从而过早地停止排序。

07-24 09:44