當給定一個元素數組時,如何計算算法執行的元素比較量?如何計算Quicksort算法中元素比較的數量?
這不像向分區方法添加計數器那麼簡單。
private void partition(int low, int high) {
int i = low, j = high;
// Get the pivot element from the middle of the list
int pivot = numbers[low + (high-low)/2];
// Divide into two lists
while (i <= j) {
if (array[i] < pivot) {
i++;
compareCount++; //it's not as easy as just adding this here
}
else if (numbers[j] > pivot) {
j--;
compareCount++;
}
else (i <= j) {
exchange(i, j);
i++;
j--;
}
}
你不能這樣做,因爲它計算剛剛做出的比較,而不是計算結果爲false時的任何比較。
我試過將if (array[i] < pivot)
更改爲while (array[i] < pivot)
(對於j),但我覺得我仍然錯過了某些東西,如果我這樣做。
相反,你必須指望交換的數量。我認爲我無法解釋你真正想要的東西,可以請澄清一點。還有,如果部分你爲什麼要做++ comparecounter? – Algorithmist 2011-03-01 03:46:13
我把它留在那裏最初是因爲當對所有相等元素的數組進行排序時,這是我能夠判斷元素何時被排序的唯一方法。 – David 2011-03-01 04:10:53
當你在做while(array [i]
Algorithmist
2011-03-01 05:55:17