【发布时间】:2014-11-02 21:25:21
【问题描述】:
我有一个使用 QuickSort 算法对数组进行排序的代码。我的代码正确排序数字。但是,它不能打印在每个步骤中选择的枢轴。我想要做的是将枢轴存储在一个数组中,然后在一个函数中打印这个数组的元素。在我看来,枢轴的数量最多等于 array-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);
}
【问题讨论】:
-
数组命名不当。它不是枢轴数量的数组。它是一个枢轴数组。
-
观察:一旦放置了一个枢轴,它就再也不会移动了。因此,在分区步骤之后,枢轴位于已排序的位置。因此,任何枢轴都可以通过其索引来识别,这提供了一个简单的证明,即枢轴的数量与数组元素的数量一样多,或者如果在分区足够小后使用不同的排序方法则更少。
标签: java algorithm sorting quicksort