Использование массива записей в Qsort, c или Stack Overflow

lastname — это поле в записи, EmployeeRecord, как определено в record.h, я пытаюсь использовать
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;

0

Решение

Во-первых, в вашем коде много ошибок.

Вам определенно нужно посмотреть на них.

И кажется, что вы сортируете запись на основе lastname

Почему ты не используешь qsort ?

Что-то вроде этого:

const int no_of_employee =100;

EmployeeRecord *ER[no_of_employee];

static int compare(const void *e1, const void *e2)
{
EmployeeRecord *tmp1 =*(EmployeeRecord **)e1;
EmployeeRecord *tmp2 =*(EmployeeRecord **)e2;
return strcmp( tmp1->lastname,tmp2->lastname);
}qsort (ER, no_of_employee, sizeof(EmployeeRecord *), compare);

Кроме того, я бы предложил использовать STL, чтобы сделать его проще.

Довольно сложно указать на каждую ошибку в вашем коде, проанализировать ваши ошибки, связав их со следующим кодом (примерно как в вашем коде)

void swap(EmployeeRecord *e1, EmployeeRecord *e2)
{
EmployeeRecord tmp ;
tmp = *e1;
*e1 = *e2;
*e2 = tmp;
}

void externalSort(EmployeeRecord employee[], int start, int end){
if(start < end){
int left=start+1, right=end;
EmployeeRecord pivot = employee[start];
while(left<right){
if(strcmp(employee[left].lastname, pivot.lastname) < 0)
left++;

else if(strcmp(employee[right].lastname, pivot.lastname) > 0)
right--;
else
swap(&employee[left],&employee[right]);
}
if(strcmp(employee[left].lastname, pivot.lastname) < 0){
swap(&employee[left],&employee[start]);
left--;
}
else{
left--;
swap(&employee[left],&employee[start]);
}
externalSort(employee, start, left);
externalSort(employee, right, end);
}
}

// externalSort(employee, 0, emptotal);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]