に基づいて Qsort を使用していemployee.lastname
ます。
left
通過した回数のカウンターです。
emptotal
, (またはright
) は合計何個あるかです。
私は 5 つあることを知っているので、ピボット ポイントを 3 に強制しました。カウントアップ (またはカウントダウン) してから、エンドカウンターに到達する必要があります。
#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.
}