employee.lastname
을 기반으로 Qsort를 사용하고 있습니다.
left
은 우리가 몇 번이나 통과했는지에 대한 카운터입니다.
emptotal
(또는 right
)의 합계는 몇 개인 지입니다.
나는 5가 있다는 것을 알고 있기 때문에 피벗 포인트를 3으로 강제했다. 내 문제는 전체 루프에서 두 번째 재귀 호출과 함께, 나는 그것이 왜 반복되는지 파악할 수 없다. 그것은 카운트 업 (또는 다운) 한 다음 종료 카운트를 충족시켜야합니다.루핑 재귀 함수 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 함수는 ** not ** * tail-recursion * –
입니다. 꼬리 재귀는 함수가 일정량의 작업을 수행 한 다음 자체를 호출하는 재귀 적 전략입니다. "꼬리"는 재귀가 함수의 맨 끝에 있다는 사실을 나타냅니다. externalSort 자기 자신을 호출하고, 그 꼬리에서 호출이 일어난다. 어떻게 꼬리 재귀가 아닌가? 또한, 내가 일하고있는 범위에서 허용되지 않기 때문에 std :: sort를 사용하지 않습니다. –