我正在尝试实现快速排序,但我正在按照书中的步骤进行操作,但我不知道应如何实现三位数的中位数。我遵循了书中的说明,但我不明白为什么三个位数的中位数实际上会有所帮助?我从来没有真正做任何事情。
这是我的实现方式:
Herer是我的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;
}
我的实际意思是,我不应该在分区中使用中间元素吗? 任何帮助都会很棒,谢谢。
答案 0 :(得分:1)
使用中位数3的Hoare分区方案示例
--reporter-csv-export ./pathName/TestSuite1_Dev.csv