我實現了一個簡單的快速排序(下面的代碼)來計算由quicksort進行的平均和最差比較。我宣佈了一個全局變量來存放用於比較的計數器。我將3個計數器置於不同的位置,我認爲會計算比較結果,問題是計數器總數與快速排序進行的比較總數的理論值不匹配。我試圖解決這個問題好幾個小時,但總結出來了。我非常感謝,如果你能指出我應該把櫃檯放在哪裏,爲什麼我應該把它們放在那裏。我假設一個櫃檯應該去哪裏進行比較。顯然我錯了。計算快速排序比較
public int[] quickSort(int[] array, int start, int end){
if (start < end){
counter++;//1st comparison here
int pivot;
pivot = Partition(array, start, end);
quickSort(array, start, pivot - 1);
quickSort(array, pivot + 1, end);
}
return array;
}
private int Partition(int[] array, int start, int end) {
int pivot = array[end];
int i = start - 1;
for(int j = start; j <= end - 1; j++){
counter++;//2nd comparison here
if (array[j] <= pivot){
counter++;//3rd comparison here
i = i + 1;
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
int temp = array[i+1];
array[i+1] = array[end];
array[end] = temp;
return i + 1;
}
第一次調用'quicksort'如何?您還可以發佈一些比較理論和實際數量的例子。 – 2012-03-10 12:12:49
即時選擇最後一個元素作爲主題。我試着只留下第三個計數器,但我的計數器增加了近25%,即時計算理論值爲SIZE *(SIZE-1)/ 2,其中SIZE是最差情況下的數組大小。第一個調用看起來像quickSort(testArray,0,testArray.length - 1) – David 2012-03-10 12:20:19
1000個隨機生成的數字存儲在一個數組中,預期值大約是499500 – David 2012-03-10 12:23:50