2014-11-02 92 views
0

我有一个用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); 
} 
+1

该数组名称很差。这不是一系列的枢轴。这是一个枢轴阵列。 – EJP 2014-11-02 22:03:55

+0

观察:一旦放置了一个枢轴,它就不会再移动。所以在分区步骤之后,主键位于已排序的位置。因此,任何枢轴都可以通过它的索引来识别,这提供了一个简单的证明,即有数组元素的枢轴数量很多,或者当分区足够小时使用不同的排序方法。 – rici 2014-11-03 05:27:33

回答

1
NumberOfPivots = new int[array.length-1]; 

将删除所有的枢轴每次QuickSorting()被调用。在其他地方初始化数组(只有一次),它应该工作。

btw。请用小写字母开始方法名称,看起来更好,并且是标准:)

+0

谢谢!有用。 – user3864949 2014-11-02 21:38:23