如何跟踪“快速排序”中的枢轴数?

时间:2019-03-16 10:57:42

标签: java recursion quicksort

我尝试了不同的方法。

  1. 将quickSort的返回类型更改为int并将参数“ int numPivots”添加到该方法。然后我添加了numPivots ++;调用分区方法后,最后返回numPivots。当传递0作为参数时,我的main方法中返回的值为1。这是有道理的,因为它是所有递归后将返回的第一个值。我只是不知道要做什么才能使这项工作生效。

  2. 在main方法中创建“ ArrayList枢轴”,并将其作为参数传递给quickSort,然后从那里传递给分区。我充满了所有的枢纽,但仍然没有得到正确的结果。这是一种怪异的方法,但是我被迷住了。

  3. 创建实例变量和方法以增加它/获取其值。这也不起作用,感觉有点愚蠢。

这是代码

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

    int partition = partition(arr, start, end);


    if(partition-1>start) {
        quickSort(arr, start, partition - 1);
    }
    if(partition+1<end) {
        quickSort(arr, partition + 1, end);
    }

}

public static int partition(int[] arr, int start, int end){
    int pivot = arr[end];


    //checks if left pointer < pivot
    for(int i=start; i<end; i++){
        if(arr[i]<pivot){
            int temp= arr[start];
            arr[start]=arr[i];
            arr[i]=temp;
            start++;
        }
    }

    //switches pivots
    int temp = arr[start];
    arr[start] = pivot;
    arr[end] = temp;

    return start;
}

另外:我认为quickSort可以使用2个指针,即左指针和右指针。无法编写自己的quickSort算法后,我只是从教程中学习了这一算法。这使我感到困惑,因为它不使用rightPointer。 我花了笔和纸来遵循这些步骤,我想我知道它是如何工作的,但是它与here所解释的算法相同吗?

我知道这些是很多问题。谢谢您的时间!

1 个答案:

答案 0 :(得分:0)

像这样解决它:

class CountObject{
int count;

public CountObject(int count){
    this.count=count;
}
public void increaseCount (){
    this.count++;
}

public int getCount() {
    return count;
}

}