我正在尝试实现 3-Way 分区以进行快速排序。我用很多自定义测试用例进行了测试,但如果工作正常,但对于一些未知的情况它会失败。我无法弄清楚我要去哪里。
这是代码。分区:
int* partition3(vector<long long int> &a, int l, int r) {
int* m = new int[2];
long long int x = a[l];
int j = l;
int k = l;
for (int i = l + 1; i <= r; i++) {
if (a[i] < x) {
j++;
k++;
swap(a[i], a[j]);
}
else if(a[i]==x)
{
k++;
swap(a[i],a[k]);
}
}
swap(a[l], a[j]);
m[0]=j;
m[1]=k;
return m;
}
排序功能:
void randomized_quick_sort(vector<long long int> &a, int l, int r) {
if (l >= r) {
return;
}
int k = l + rand() % (r - l + 1);
swap(a[l], a[k]);
int* m = new int[2];
m = partition3(a, l, r);
randomized_quick_sort(a, l, m[0]-1);
randomized_quick_sort(a, m[1], r);
}
如果您能帮助我,我将不胜感激。