Быстрая сортировка двусвязного списка

177
05 февраля 2020, 13:30

Есть структура двусвязного списка с данными:

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);
}
READ ALSO
Сортировка массива в с++

Сортировка массива в с++

Не могу найти ошибку, к сожалениюЗадание: отсортировать отриц элементы в порядке убывания, положительные оставить на месте

201
Метод Рунге-Кутты системы ДУ

Метод Рунге-Кутты системы ДУ

Нужно написать программу для решения задачи Коши для системы дифференциальных уравнений типа dy/dt=A11*y+A12*x+B1 dx/dt=A21*y+B22*x+B2 И почему то получается...

148
Найти все смежные пары равных элементов вектора

Найти все смежные пары равных элементов вектора

Количество элементов вектора в два раза больше задаваемого nПри моем довольно прямолинейном способе итератор выходит за конец вектора

156
Изменить i++ на умножения цикл for С++

Изменить i++ на умножения цикл for С++

Хочу узнать как можно изменить условия i++ на что то другое, например умножения или деления на саму себя, или с другой переменной

182