С ++ пузырьковая сортировка в двусвязном списке - PullRequest
2 голосов
/ 28 марта 2020

Я видел алгоритм пузырьковой сортировки на https://www.geeksforgeeks.org/bubble-sort-on-doubly-linked-list/, и я хочу, чтобы функция сортировки выполняла восходящий и нисходящий порядок, как переключатель, она отлично работает в возрастающем случае, но не работает когда спускается, почему? Вот узел и функция сортировки:
Узел имеет dynamic string array в качестве данных, поэтому я хочу, чтобы он сортировал только на основе определенного столбца, индекс столбца index в bubbleSort.

struct EntryNode {
    string *entry;

    EntryNode *prev;
    EntryNode *next;
};
void bubbleSort(EntryNode *start, int index, enum order order) {
    int swapped, i;
    EntryNode *ptr1;
    EntryNode *lptr = NULL;

    /* Checking for empty list */
    if (start == NULL) return;

    if (order == ASCENDING) {
        do
        {
            swapped = 0;
            ptr1 = start;

            while (ptr1->next != lptr)
            {
                if (ptr1->entry[index].compare(ptr1->next->entry[index])>0)
                {
                    ll_swapData(ptr1, ptr1->next);
                    swapped = 1;
                }
                ptr1 = ptr1->next;
            }
            lptr = ptr1;
        }
        while (swapped);
    }

    if (order == DESCENDING) {
        do
         {
             swapped = 0;
             ptr1 = start;

             while (ptr1->next != lptr)
             {
                 if (ptr1->entry[index].compare(ptr1->next->entry[index])<0)
                 {
                     ll_swapData(ptr1, ptr1->next);
                     swapped = 1;
                 }
                 ptr1 = ptr1->next;
             }
             lptr = ptr1;
         }
         while (swapped);
    }
}
...