lastname은 record.h에 정의 된 EmployeeRecord 레코드의 필드입니다. Qsort를 사용하여 직원 [emptotal] .lastname의 문자열을 정렬하려고합니다.Qsort의 레코드 배열을 c 또는 C++로 사용
#include "./record.h"
void externalSort(EmployeeRecord *lastname,int empcount,int emptotal)
{
empcount = 0;
emptotal = 5;
EmployeeRecord employee[emptotal];
int left=empcount,
right=emptotal;
EmployeeRecord pivot[].lastname = employee[(empcount+emptotal)/2].lastname;
while (left < right) {
// find left candidate
while (&employee[left].lastname < &pivot[(empcount+emptotal)/2].lastname) left++;
// find right candidate
while (&employee[right].lastname > &pivot[(empcount+emptotal)/2].lastname) right--;
if (left <= right) {
EmployeeRecord &temp.lastname = &employee[left].lastname;
&employee[left].lastname = &employee[right].lastname;
&employee[right].lastname = &temp.lastname;
left++;
right--;
}
} // while left < right
if (empcount < right) externalSort(char *lastname,empcount,right);
if (left < emptotal) externalSort(char *lastname,left,emptotal);
}
내가 처음 몇 줄을 할 수있는 올바른 방법에 관해서는 손해를보고, 그래서 여러 가지 변화가 있었다 미안 해요는, 내 주요 문제는 선언 라인이며, 다음은 EmployeeRecord 피벗 [] .lastname = employee [(empcount + emptotal)/2] .lastname; 피벗을 올바르게 선언하는 방법을 알고 나면 올바르게 정렬을 지정하는 방법을 알게 될 것입니다.
(또한 그것은 임시 할당에 도움이 될 것입니다.)
(record.h 도움이된다면) 모든
typedef char STR9[9+1];
typedef char STR7[7+1];
typedef char STR16[16+1];
typedef struct EmployeeRecord
{
STR9 lastname;
STR7 firstname;
STR16 fullname;
float hours,
overhours,
pay_rate,
defered,
gross,
fedtax,
statetax,
ssitax,
netpay;
} EmployeeRecord;
당신은 사용해야합니다'을 strcmp (직원 [왼쪽 ] .lastname, pivot [(empcount + emptotal)/2] .lastname)'& employee [left] .lastname 대신에 <0'. & pivot [(empcount + emptotal)/2] .lastname' – higuaro
내 원래의 질문이 아닙니다. 그러나 당신의 충고에 감사드립니다. –