计算快速排序中的比较次数
Counting the number of comparisons in 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);
您的静态变量可能没有按预期设置为0。请将其设置为全局变量。
此外,为什么在进行递归调用时而不是在进行调用时进行工作?做一次比做两次容易得多。
相关文章:
- 如何修复我的快速排序实现?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在 MIPS 中快速排序
- 不正确的比较和交换计数器输出用于快速排序功能
- 使用 std::vector C++快速排序,EXC_BAD_ACCESS代码 2
- 使用快速排序对 C++ 中的可视化工具错误进行排序
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 并行快速排序分区中的隔离错误
- 实现 3 路分区以实现快速排序
- 为什么这个快速排序实现给出了一个奇怪的输出
- 我的快速排序在对预排序的项目进行排序时失败,如何改进?
- 快速排序不适用于大型数组
- 快速排序;分段错误,但找不到位置?
- 为什么这两个版本的快速排序在进行比较的次数上存在巨大差异
- 如何在C++中获取快速排序的移动,交换和比较计数
- 在快速排序中计算比较
- 计算快速排序中的比较次数
- 使用中间元素作为透视C++计算快速排序中的比较数
- 手工编码的快速排序在较小的整数上比较慢
- 快速排序正确的实现,但有一些额外的比较