Мне нужно сортировкой слиянием по имени и по сумме отсортировать элементы базы данных. Когда сортирую только по имени или только по сумме всё отлично выходит, но совместно эти условия не дают нужного результата. Элементы меняют свой порядок но не полностью как нужно. Что не так не могу понять. Хочу получить все имена по алфавиту на меньшую сумму и так далее на остальные до конца, а сейчас я получаю то что на изображение
struct human // ya4eika dlya bazi
{
char name[32] = { 0 };
unsigned short int number;
char date[8] = { 0 };
char lawyer[22] = { 0 };
} *stacks;
struct lister // spisok
{
lister* next;
human* data;
} *head, * tail;
int compUsers(lister* first, lister* second)
{
int nameCompareResult = strcmp(first->data->name, second->data->name);
if (nameCompareResult)
return nameCompareResult;
else
return first->data->number - second->data->number;
}
lister* mergeSortedList(lister* stl1, lister* stl2)
{
lister* result = NULL;
if (stl1 == NULL)
return stl2;
if (stl2 == NULL)
return stl1;
int num = strncmp(stl1->data->name, stl2->data->name, 3);
//recursing merging 2 lists
if (compUsers(stl1, stl2) < 0) //(stl1->data->number <= stl2->data->number)//(num <= 0)
{
result = stl1;
result->next = mergeSortedList(stl1->next, stl2);
}
else
{
result = stl2;
result->next = mergeSortedList(stl1, stl2->next);
}
return result;
}
void mergeS(lister** thead)
{
lister* head = *thead;
lister* ptr1;
lister* ptr2;
if (head == NULL || head->next == NULL)
return;
splitList(head, &ptr1, &ptr2);
//recursively sorting 2 lists
mergeS(&ptr1);
mergeS(&ptr2);
*thead = mergeSortedList(ptr1, ptr2);
}