Как вычислить количество сравнений в медианном быстром сортировке? Где я должен увеличивать счетчик, чтобы вычислить это? Мой код срединной быстрой сортировки ниже:число сравнений срединный quicksort
void my_swap(vector<int>&vect, int dex1, int dex2) {
int temp = vect[dex1];
vect[dex1] = vect[dex2];
vect[dex2] = temp;
}
int find_median(vector<int>&vect, int p, int r) {
int center = (p + r)/2;
if (vect[p] > vect[center])
my_swap(vect, p, center);
if (vect[p] > vect[r])
my_swap(vect, p, r);
if (vect[center] > vect[r])
my_swap(vect, center, r);
my_swap(vect, center, r - 1);
return vect[r - 1];
}
void standart_sort(vector<int>&vect, int p, int r) {
if (r - p + 1 <= 1){
return;
}
if (r - p + 1 == 2) {
if (vect[p] > vect[r]){
my_swap(vect, p, r);
}
return;
} else {
if (vect[p] > vect[r - 1]){
my_swap(vect, p, r - 1);
}
if (vect[p] > vect[r]){
my_swap(vect, p, r);
}
if (vect[r - 1] > vect[r]){
my_swap(vect, r - 1, r);
}
}
}
int partition_for_median(vector<int>&vect, int p, int r, double pivot) {
double x = pivot;
int i = p - 1;
for(int j = p; j <= r - 1; j++)
{
counter++; //pasted here
if(vect[j] <= x)
{
i++;
my_swap(vect, i, j);
}
}
my_swap(vect, i + 1, r);
return i;
}
void quick_sort_median(vector<int>&vect, int p, int r) {
if (r - p + 1 <= 3){
counter2++;
standart_sort(vect, p, r);
}
else {
double median = find_median(vect, p, r);
int partition = partition_for_median(vect, p, r, median);
quick_sort_median(vect, p, partition - 1);
quick_sort_median(vect, partition + 1, r);
}
}
Например, в этом массиве {3,7,5,1,9,6,4,10,8,2}
есть 25
сравнения, но как я могу вычислить, что?