快速排序 - 比较/交换计数器

时间:2015-10-04 14:29:09

标签: java sorting data-structures

早上好。我制作了一个程序,在2000个项目的数组上实现了几种不同的排序方法,并产生了比较数量和数量。每种排序方法的交换。

当我选择quicksort方法时,它会给我这个输出:

“交流次数:1

比较次数:2

交换次数:1

比较次数:2

交换次数:1

比较次数:6

交换次数:1

比较次数:2

交换次数:1

...

...

快速分拣完成。

这是一个使用冒泡排序的例子,我希望输出为:

比较次数:1999

交换次数:0

气泡排序已完成。

我知道我需要移动比较&交换柜台,但我无法弄清楚在哪里移动它们以获得所需的结果。

有人可以帮忙吗?

我真的很感激!这让我开始香蕉。

以下是我的快速排序代码:

    // QUICK SORT
public static void quickSort(AnyType[] array, int low, int high)
{
    int i = low, j = high, comparisons = 0, exchanges = 0;
    AnyType temp, pivot = array[(low + high)/2];

    while (i <= j)
    {
        while(array[i].isLessThan(pivot))
        {
            i++;
            comparisons++;
        }
        while(array[j].isBetterThan(pivot))
        {
            j--;
            comparisons++;
        }
        if (i <= j) {
            temp = array[i];
            array[i] = array[j];
            array[j] = temp;
            i++;
            j--;
            exchanges++;
        }
    }

    if (low < j) 
    {
        quickSort(array, low, j);
    }
    if (i < high) 
    {
        quickSort(array, i, high);
    }

    System.out.println("Number of comparisons: "+ comparisons);
    System.out.println("Number of exchanges: "+ exchanges);
}

1 个答案:

答案 0 :(得分:0)

您以递归方式调用quickSort()。对于每次迭代,它将在从后续调用返回时执行println代码。您需要确保打印代码仅在方法的最外层(第一次)迭代上执行。