计算快速排序中的比较次数

Counting the number of comparisons in quicksort

本文关键字:比较 快速排序 计算      更新时间:2023-10-16

我有一个家庭作业,需要用三种分区策略实现快速排序,并计算每个策略的比较次数。

为了简单起见,每次对长度为m的数组进行递归调用时,我们都被要求将m-1添加到计数中。

我的代码总是返回负数,这不是整数溢出问题
我用过long long int,现在仍然有,比较的数量不可能增长那么多,所以我的计数方式有问题。

在调用我的实现后,我使用is_sorted在100000元素的数组上测试了代码,它通过了,所以排序是正确的
这是我的代码:

long quick_sort (vector <int>& A, int l , int r){
    static  long count = 0;
    if ( r<= l)
        return 0;
    //partition
    int i = partition(A, l, r);
    //quicksort left
    int amount = ( ((i -1) -l) >= 0 ?
                            ((i-1) -l) :
                                    0);
    count += amount;
    quick_sort (A,l, i-1);
    //quicksort right
    amount = ((r - (i +1)) >= 0 ?
                        (r - (i +1)) :
                                  0);
    count += amount;
    quick_sort (A,i+1, r);
    return count;
}

更改测试值以保存正确的表达式:

count += ( (i-1)-l >= 0 ? (i-1)-l : 0 )
quick_sort (A,l, i-1);

count += ( r-(i+1) >= 0 ? ...
quick_sort (A,i+1, r);

您的静态变量可能没有按预期设置为0。请将其设置为全局变量。

此外,为什么在进行递归调用时而不是在进行调用时进行工作?做一次比做两次容易得多。