【问题标题】:Number of Pivots in Quick Sort快速排序中的枢轴数
【发布时间】: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


【解决方案1】:
NumberOfPivots = new int[array.length-1];

每次调用QuickSorting() 时都会删除所有数据透视表。在别处初始化数组(仅一次),它应该可以工作。

顺便说一句。请以小写字母开头的方法名称,看起来更好并且是标准的:)

【讨论】:

    猜你喜欢
    • 2011-08-31
    • 2010-09-14
    • 2018-11-14
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多