计算快速排序比较

时间:2012-03-10 11:57:46

标签: java sorting quicksort

我实现了一个简单的快速排序(下面的代码)来计算quicksort所做的平均和最差比较。我声明了一个全局变量来保存计数器以进行比较。我在不同的位置放置了3个计数器,我认为这些计数器会进行比较,问题是计数器总和与快速排序所做的比较总数的理论值不匹配。我试图解决这个问题好几个小时但是很短暂。如果你能指出我应该把柜台放在哪里以及为什么要把它们放在那里,我真的很感激。我假设一个计数器应该去哪里比较。显然我错了。

public int[] quickSort(int[] array, int start, int end){


    if (start < end){
        counter++;//1st comparison here
        int pivot;  

        pivot = Partition(array, start, end);
        quickSort(array, start, pivot - 1);
        quickSort(array, pivot + 1, end );
    }
return  array;
}

private int Partition(int[] array, int start, int end) {
    int pivot = array[end];
    int i = start - 1;

    for(int j = start; j <= end - 1; j++){

        counter++;//2nd comparison here


        if (array[j] <= pivot){
            counter++;//3rd comparison here
            i = i + 1;

            int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }

    }

    int temp = array[i+1];
    array[i+1] = array[end];
    array[end] = temp;

    return i + 1;
}

1 个答案:

答案 0 :(得分:2)

对于理论,只计算数组元素的比较,而不是指数与边界的比较,所以你应该只留下第二个counter++;(你需要增加计数器,而不是结果比较)。

然后有一个问题,你要比较哪些理论值。有快速排序的不同实现,使用略微不同的比较数。特别是,您对枢轴的选择不会试图避免极值,因此这种实现很容易降级为O(n ^ 2)行为。