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

标签 c++ algorithm sorting quicksort

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

为了简单起见,每次对长度为 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);

关于c++ - 计算快速排序中的比较次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26598263/

相关文章:

algorithm - 计算可能是循环的链表中的节点数

mysql - 对混合文本和数字的数据进行自然排序(然后是更多文本*有时*)

arrays - 通过 Ruby 中包含元素的哈希键按升序和降序对数组进行排序

python - 如何按子列表的反向长度对嵌套列表进行排序并保持原始顺序

c++ - 如何在 QUrl 中设置主机路径?

c++ - C/C++运行时从何而来?

检查有向图是否强连通的算法

python - 找到小于 n 的最大素数,其中 n = ~10^230

android - 无法在Eclipse中使用NDK生成APK文件

c++ - ROS 节点无法通过启动文件执行工作