繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM