通过多个递归级别

通过多个递归级别

我编写了一个快速排序程序,该程序可以计算为对数组进行升序排序而执行的交换次数。在此程序中,由于无法确定如何通过多个递归级别保留值,因此我使用了全局变量来计算交换次数。我理解这样的概念,即在函数自身折叠时,将通过多个递归级别来保留值,但是我显然无法实现它。有人可以建议我这样做的方法吗?

import java.util.Scanner;

public class QuickSort {

    // global variable for counting the quicksort shifts.
    private static int swapCount = 0;

    public static void main(String[] args) {

        // scanning the values;
        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        int ar[] = new int[N];
        for(int i = 0 ; i < N ; i++){
            int value = scan.nextInt();
            ar[i] = value;
        }

        quickSort(ar, 0, ar.length-1);
        System.out.println(swapCount);

    }

    //quickSort
    public static void quickSort(int ar[], int start, int end){

        if(start<end){
            int pIndex = partition(ar, start, end);
            quickSort(ar,start, pIndex-1);
            quickSort(ar, pIndex+1, end);
        }
    }

    // partition function
    public static int partition(int ar[], int start, int end){
        int pivot = ar[end];
        int pIndex = start;
        for (int i = start ; i < end ; i++ ){
            if(ar[i] < pivot){
                int temp = ar[i];
                ar[i] = ar[pIndex];
                ar[pIndex] = temp;
                swapCount++;
                pIndex++;
            }
        }
        int temp = ar[end];
        ar[end] = ar[pIndex];
        ar[pIndex] = temp;
        swapCount++;
        return pIndex;
    }
}

最佳答案

您面临的问题是,在Java中,诸如int之类的基本类型值在传递给函数时,如果在函数返回后查看其值,则它们不会反映对函数内部对其进行的任何更改。解决该问题的方法(即使它不一定是“好的样式”)是将Class对象传递给函数而不是原始对象,然后更改在函数内部进行的class对象成员变量的更改后来反映在外面。

// in main()
Integer nbrSwaps = new Interger(0);
quickSort(ar, 0, ar.length-1, nbrSwaps);

//quickSort
public static void quickSort(int ar[], int start, int end, Integer swapCount) {

  if(start<end){
    int pIndex = partition(ar, start, end, swapCount);
    quickSort(ar,start, pIndex-1, swapCount);
    quickSort(ar, pIndex+1, end, swapCount);
  }
}

// partition function
public static int partition(int ar[], int start, int end, Integer swapCount) {
  ... as before ...
}

关于java - 如何通过多个递归级别保留值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42683315/

10-08 22:08