我有一個家庭作業,我需要使用三種分區策略實施快速排序並計算每個策略的比較次數。計算快速排序中的比較次數
爲了簡單起見,我們被要求在每次我們對長度爲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);'。更容易,更容易出錯。 – Deduplicator 2014-10-27 23:09:51