我实现了一个简单的快速排序(下面的代码)来计算由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