目前,我有一个快速排序算法的准系统实现来对一些随机生成的数字进行排序。排序是有效的,比归并排序更有效。但是,对于特定的数字集(例如需要反向排序的反转数字),我需要优化枢轴。
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* 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 (*(last - 1), *i);
return i;
}
因此,对于这段代码,我要么使用随机数作为分区步骤的基准,要么使用第一个、中间和最后一个元素的中值作为基准。
我该怎么做?
我是排序算法的新手,我对它们的理解还不完整。