【问题标题】:Bubble sort using recursive function in C使用C中的递归函数进行冒泡排序
【发布时间】:2019-06-06 21:56:02
【问题描述】:

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

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

【问题讨论】:

    标签: c arrays pointers recursion


    【解决方案1】:
    if(vidx == n)
        bubble(arr,n-1,0);
        return;
    

    这就是为什么我提倡总是使用大括号。按原样,该代码相当于:

    if(vidx == n){ bubble(arr,n-1,0); }
    return;
    

    bubble 函数的大部分主体都无法访问。

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

    • vidx 可以达到数组的长度,因此 vidx+1 将索引超过末尾,这可能会导致问题
    • 当您点击两个相对于彼此按正确顺序排列的相邻元素(即*(arr+vidx) &lt;= *(arr+vidx+1))时,您无需进一步递归就可以到达函数的末尾,从而提前停止排序。

    【讨论】:

    • 如果您是从Python 到C,这是特别好的建议。
    猜你喜欢
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 2013-10-09
    • 2019-01-25
    • 2018-12-11
    相关资源
    最近更新 更多