java 如何正确实现冒泡排序递归?

g52tjvyc  于 2022-11-27  发布在  Java
关注(0)|答案(1)|浏览(147)

我正在写一个方法,用递归实现冒泡排序,我的基本情况是"数组的长度",在这种情况下,我必须递归调用函数从"0"到array.length-1,但是,当我浏览其他人的代码时,我发现他们都使用基本情况"1",也就是从array.length到"1"的递归。我知道我们的两个递归运行了相同的次数,得到了相同的结果,但我有点困惑,这是否意味着我对递归的理解是错误的?
我代码:

public static void bubbleRecursion(int arr[],int n){
    if (n==arr.length){
        System.out.println(Arrays.toString(arr));
        return;
     }
    for (int i = 0;i<arr.length-1-n;i++){
      if (arr[i]>arr[i+1]){
        int temp;
        temp = arr[i];
        arr[i] = arr[i+1];
        arr[i+1] = temp;
       }
     }
     bubbleRecursion(arr, n+1);
  }

bubbleRecursion(array,0);

其他人的代码:

public static void sortingRecursion(int[] arr, int n){
  if (n == 1){
     return;
  }
  for (int i = 0;i < n-1;i++){
      if (arr[i]>arr[i+1]){
        int temp;
        temp = arr[i];
        arr[i] = arr[i+1];
        arr[i+1] = temp;
       }
   }
   sortingRecursion(arr, n-1);
}

sortingRecursion(array, array.length);

然后我查了一下递归的定义,似乎每次输入都应该越来越小,但是我的代码每次都增加n的值,所以现在我有点困惑,这是否意味着我的代码是一个错误的答案,尽管输出是正确的?
有人能帮我吗?谢谢

xvw2m8pv

xvw2m8pv1#

您的基本案例应为if (n == 0) return;

解决方案

public static void sortingRecursion(int[] arr, int n){
  if (n == 0){
     return;
  }
  for (int i = 0;i < n;i++){
      if (arr[i]>arr[i+1]){
        int temp;
        temp = arr[i];
        arr[i] = arr[i+1];
        arr[i+1] = temp;
       }
   }
   sortingRecursion(arr, n-1);
}

用法

int array[] = {5, 4, 7, 2, 8};
sortingRecursion(array, array.length - 1);
System.out.println(Arrays.toString(array));

输出

[2, 4, 5, 7, 8]

已编辑

相关问题