Есть структура двусвязного списка с данными:
struct Employee
{
string department;
string FIO[3];
double amountOfWorkDone;
double unitPrice;
double earnings;
string user;
string password;
Employee *next;
Employee *prev;
};
Её нужно отсортировать с помощью алгоритма быстрой сортировки по полю amountOfWorkDone
. Попытался алгоритм с массивов переделать на двусвязный список, но что-то не получается, не выходит из рекурсии. Вот код:
void QuickSort(Employee **begin, Employee **end)
{
Employee **piv = begin;
Employee **l = &(*piv)->next;
Employee **r = end;
while ((*r)->next != (*l)->prev && (*r)->next != (*l) && *l != *r)
{
while ((*l)->amountOfWorkDone < (*piv)->amountOfWorkDone)
l = &(*l)->next;
while ((*r)->amountOfWorkDone > (*piv)->amountOfWorkDone)
r = &(*r)->prev;
if ((*r)->next != (*l)->prev && (*r)->next != *l && l != r)
{
swap((*l)->FIO, (*r)->FIO);
swap((*l)->department, (*r)->department);
swap((*l)->amountOfWorkDone, (*r)->amountOfWorkDone);
swap((*l)->unitPrice, (*r)->unitPrice);
swap((*l)->earnings, (*r)->earnings);
swap((*l)->user, (*r)->user);
swap((*l)->password, (*r)->password);
l = &(*l)->next;
r = &(*r)->prev;
}
}
if (begin != r)
QuickSort(begin, r);
if (end != l)
QuickSort(l, end);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Не могу найти ошибку, к сожалениюЗадание: отсортировать отриц элементы в порядке убывания, положительные оставить на месте
Нужно написать программу для решения задачи Коши для системы дифференциальных уравнений типа dy/dt=A11*y+A12*x+B1 dx/dt=A21*y+B22*x+B2 И почему то получается...
Количество элементов вектора в два раза больше задаваемого nПри моем довольно прямолинейном способе итератор выходит за конец вектора
Хочу узнать как можно изменить условия i++ на что то другое, например умножения или деления на саму себя, или с другой переменной