В настоящее время у меня есть реализация barebone алгоритма quicksort для сортировки некоторых случайно сгенерированных чисел. Сорт эффективен, более того, чем сортировка слияния. Однако для конкретных наборов чисел (например, обратных номеров, которые нужно сортировать по-другому), мне нужно оптимизировать опорный стержень.C++ QuickSort Pivot Optimization
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;
}
Так что для этого кода, я либо хочу использовать случайное число в качестве опоры для стадии разделения, или использовать медиану, отчество и последние элементы, как стержень.
Как мне это сделать?
Я новичок в сортировке алгоритмов, и мое понимание их еще не завершено.
ошибка: неверное преобразование из 'int' в 'int *' в строке int * pos = (rand (last - 1)); – Edge
затем добавьте бросок. – Thomash
Кроме того, rand() не предназначен для принятия каких-либо параметров. – Edge