lastname はレコード内のフィールドであり、record.h で定義されている EmployeeRecord です。Qsort を使用して、employee[emptotal].lastname の文字列をソートしようとしています。
#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 pivot[].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;