我尝试了不同的方法。
将quickSort的返回类型更改为int并将参数“ int numPivots”添加到该方法。然后我添加了numPivots ++;调用分区方法后,最后返回numPivots。当传递0作为参数时,我的main方法中返回的值为1。这是有道理的,因为它是所有递归后将返回的第一个值。我只是不知道要做什么才能使这项工作生效。
在main方法中创建“ ArrayList枢轴”,并将其作为参数传递给quickSort,然后从那里传递给分区。我充满了所有的枢纽,但仍然没有得到正确的结果。这是一种怪异的方法,但是我被迷住了。
创建实例变量和方法以增加它/获取其值。这也不起作用,感觉有点愚蠢。
这是代码
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所解释的算法相同吗?
我知道这些是很多问题。谢谢您的时间!
答案 0 :(得分:0)
像这样解决它:
class CountObject{
int count;
public CountObject(int count){
this.count=count;
}
public void increaseCount (){
this.count++;
}
public int getCount() {
return count;
}
}