【发布时间】:2014-10-27 22:58:37
【问题描述】:
我有一个作业,我需要用三个分区策略实现快速排序,并计算每个策略的比较次数。
为简单起见,每次我们对长度为 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;
}
【问题讨论】:
-
作为一个建议:计算你在哪里进行比较,也就是
int i = partition(A, l, r);这一行。更容易,更不容易出错。
标签: c++ algorithm sorting quicksort