Я пытаюсь реализовать быструю сортировку, и я следую инструкциям в своей книге, и я не понимаю, как следует реализовать медиану из трех. Я следовал инструкциям книги, но я не понимаю, почему медиана из трех на самом деле помогает? Я никогда ничего с этим не делаю.
Вот моя реализация:
Здесь моя реализация Quicksort.
void QuickSort::QuickSortM3(std::vector<int> &data, int left, int right){
if(left < right){
pivotM3(data, left, right);
int i = partition(data, left, right);
QuickSortM3(data, left, i-1);
QuickSortM3(data, i +1, right);
}
}
void QuickSort::pivotM3(std::vector<int> &data, int left, int right){
std::swap(data[(left+ right)/2], data[(right -1)]);
if(data[left] < data[right-1]){
std::swap(data[left], data[right-1]);
}
if(data[left] < data[right]){
std::swap(data[left], data[right]);
}
if(data[right -1] < data[right]){
std::swap(data[left], data[right-1]);
}
}
int QuickSort::partition(std::vector<int> &data, int left, int right){
int i = left - 1, j = right; int v = data[right];
for(;;){
while(data[++i] < v);
while (v < data[--j]){
if( j == left) {
break;
}
}
if(i >= j) break;
std::swap(data[i], data[j]);
}
std::swap(data[i], data[right]);
return i;
}
Что я на самом деле имею в виду, не должен ли я использовать средний элемент при разбиении?
Любая помощь будет великолепна, спасибо.