Я использую Qsort на основе employee.lastname
.
left
является счетчиком того, сколько мы прошли.
emptotal
, (или right
) количество, сколько есть.
Поскольку я знаю, что есть 5, я заставил точку поворота на 3. Моя проблема в том, что второй рекурсивный вызов во всех элементах цикла, и я не могу понять, почему он петли. Он должен подсчитывать (или вниз), а затем встречать свой счетчик.Looping Рекурсивная функция C++
#include "./record.h"
#include <string.h>
#include <algorithm>
void externalSort(EmployeeRecord employee[],int empcount,int emptotal)
{
int left=empcount,
right=emptotal;
EmployeeRecord pivot = employee[3];
while (left < right)
{
if (strcmp(employee[left].lastname, pivot.lastname) < 0)
{
left++;
}
else if (strcmp(employee[right].lastname, pivot.lastname) < 0)
{
right--;
}
else
{
std::swap(employee[left],employee[right]);
left++;
right--;
}
}
if (strcmp(employee[left].lastname, pivot.lastname) < 0)
{
std::swap(employee[left],employee[empcount]);
left--;
}
if (strcmp(employee[right].lastname, pivot.lastname) < 0)
{
std::swap(employee[right],employee[empcount]);
right++;
}
if (empcount < right) externalSort(employee,empcount,right);
if (left < emptotal) externalSort(employee,left,emptotal);
// The 2nd call is what seems to be looping, when I comment it out,
//the function doesn't loop.
}
Исправьте углубление. Тогда, пожалуйста, исправьте свою грамматику. – DanielKO
Есть ли причина не использовать 'std :: sort'? Также обратите внимание, что функция 'externalSort' ** не ** * tail-recursion * –
Рекурсия хвоста - это рекурсивная стратегия, в которой функция выполняет некоторую работу, а затем вызывает себя. «Хвост» относится к тому, что рекурсия находится в самом конце функции. externalSort Вызывает его сам, и этот вызов происходит в хвосте, как это не рекурсия хвоста? Кроме того, я не использую std :: sort, потому что это недопустимо в области, в которой я работаю. –