Я пытаюсь написать шаблонную функцию на C++, которая может принимать массив любого типа и сортировать его. Используемая сортировка должна быть быстрой сортировкой или сортировкой слияния, но у меня возникли проблемы с реализацией любого из них, так как быстрый заголовок сортировки обычно имеет верхний и нижний параметр, а сортировка слияния - с первый и последний параметр. Мой заголовок функции выглядит следующим образом: недействительный mySort (T * массив, Int N)Templated Quick/Merge Sort
До сих пор у меня есть это:
template <typename T>
void sort(T *a, int n)
{
int i = 0;
int j = n-1;
int tmp;
int pivot = a[(n-1)/2];
while (i <= j){
while (a[i] < pivot)
i++;
while (a[j] > pivot)
j--;
if (i<=j){
tmp = a[i];
a[i] = a[j];
a[j] = a[i];
i++;
j--;
}
}
if(0<j)
sort(a, j);
/*
if(i<right)
sort(
*/
}
Я пытался использовать рекурсивный вызов для сортировки, но я не мог выяснить, как вызвать рекурсивный для созданного правого раздела, без другого списка параметров.
вы уже знаете, что оба вида нужны первые и последние параметры, до сих пор вы код их не имеют, только массив и размер. Зачем? – VillasV
Вам нужно также остановить рекурсию, когда n становится слишком маленьким. Например, когда 'j == 1' вы удовлетворены' 0
JSF
Если вы игнорируете любые знания, которые могут иметь о том, где находится элемент опоры, и игнорировать любые проблемы с рекурсией, тогда вторая сортировка будет «sort (a + j, n-j);». (Не говорите, что вы обязательно должны игнорировать эти вещи, просто отвечая на то, что вы, похоже, спрашиваете). – JSF