我正在尝试修改一些QuickSort代码,以随机数作为支点。
但是,在测试程序时,它没有正确排序。我不确定为什么会这样做。
int random (int num) {
int random = rand() % (num - 1);
return random;
}
int* partition (int* first, int* last);
void quickSort(int* first, int* last) {
if (last - first <= 1) return;
int* pivot = partition(first, last);
quickSort(first, pivot);
quickSort(pivot + 1, last);
}
int* partition (int* first, int* last) {
//--int pivot = *(last - 1);
int* pos = (first + random(last - first));
int pivot = *pos;
int* i = first;
int* j = last - 1;
for (;;) {
while (*i < pivot && i < last) i++;
while (*j >= pivot && j > first) j--;
if (i >= j) break;
swap (*i, *j);
}
swap (*pos, *i);
return i;
}
答案 0 :(得分:0)
您的first implementation工作但具有特定数据集的退化行为。原始工作代码中的数据透视表为*(last - 1)
,因此最简单的修复方法是将随机元素与*(last - 1)
交换。原始分区代码的其余部分将保持不变。