Я видел алгоритм пузырьковой сортировки на 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);
}
}