我有一个用QuickSort算法排序数组的代码。我的代码正确排序数字。但是,它不能打印每个步骤中选择的枢轴。我想要做的是将枢轴存储在一个数组中,然后在一个函数中打印这个数组的元素。在我看来,枢轴的数量最多等于阵列1的长度。因此,我声明了NumberOfPivots数组,其大小为 array.length-1,如下面的代码所示。计数代表所选枢轴的数量。然后我尝试按照下面的分区方法分配值。最后,通过使用WritePivots方法,我尝试按照下面的方法打印支点。当我运行代码时,NumberOfPivots数组的所有元素都返回为0.我怎样才能解决这个问题,并通过使用方法获得枢轴?快速排序的枢轴点数
int[] NumberOfPivots ;
int count=0;
public void QuickSorting(int[]array, int p, int r)
{
NumberOfPivots = new int[array.length-1];
if(p<r)
{
int q = Partition(array,p,r);
this.QuickSorting(array,p,q);
this.QuickSorting(array,q+1,r);
}
}
public int Partition(int[] array, int p, int r) {
int pivot = array[p];
NumberOfPivots[count] = pivot;
count++; }
public void WritePivots()
{
for(int k : NumberOfPivots)
System.out.println(k);
}
该数组名称很差。这不是一系列的枢轴。这是一个枢轴阵列。 – EJP 2014-11-02 22:03:55
观察:一旦放置了一个枢轴,它就不会再移动。所以在分区步骤之后,主键位于已排序的位置。因此,任何枢轴都可以通过它的索引来识别,这提供了一个简单的证明,即有数组元素的枢轴数量很多,或者当分区足够小时使用不同的排序方法。 – rici 2014-11-03 05:27:33