Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;双链表上的冒泡排序_C++_Sorting_Bubble Sort_Doubly Linked List - Fatal编程技术网

C++ C++;双链表上的冒泡排序

C++ C++;双链表上的冒泡排序,c++,sorting,bubble-sort,doubly-linked-list,C++,Sorting,Bubble Sort,Doubly Linked List,我看到了冒泡排序算法,我希望排序函数像开关一样执行升序和降序,它在升序情况下工作良好,但在降序时不工作,为什么? 以下是节点和排序功能: 该节点将动态字符串数组作为数据,因此我希望它仅基于某一列进行排序,列的索引是bubbleSort中的index struct EntryNode { string *entry; EntryNode *prev; EntryNode *next; }; void bubbleSort(EntryNode*start、int索引、枚举

我看到了冒泡排序算法,我希望排序函数像开关一样执行升序和降序,它在升序情况下工作良好,但在降序时不工作,为什么? 以下是节点和排序功能:
该节点将
动态字符串数组
作为数据,因此我希望它仅基于某一列进行排序,列的索引是
bubbleSort
中的
index

struct EntryNode {
    string *entry;

    EntryNode *prev;
    EntryNode *next;
};
void bubbleSort(EntryNode*start、int索引、枚举顺序){
int交换,i;
入口节点*ptr1;
EntryNode*lptr=NULL;
/*检查空列表*/
if(start==NULL)返回;
如果(顺序==升序){
做
{
交换=0;
ptr1=启动;
while(ptr1->next!=lptr)
{
如果(ptr1->entry[index]),比较(ptr1->next->entry[index])>0)
{
ll_swapData(ptr1,ptr1->next);
交换=1;
}
ptr1=ptr1->next;
}
lptr=ptr1;
}
while(交换);
}
如果(顺序==降序){
做
{
交换=0;
ptr1=启动;
while(ptr1->next!=lptr)
{
if(ptr1->entry[index]。比较(ptr1->next->entry[index])next);
交换=1;
}
ptr1=ptr1->next;
}
lptr=ptr1;
}
while(交换);
}
}

那么
ll_swapData
的代码在哪里?这可能很重要。
std::string
具有
。比
比较
可读性强得多。
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);
    }
}