簡體   English   中英

雙向鏈表上的合並排序

[英]Merge Sort on Doubly Linked List

如何合並 2 個給定的 DList,而不必先對它們進行排序? 當我在屏幕上顯示時,我的排序 function 似乎不起作用(它不合並項目)

DoublyLinkedList MergeSort(DoublyLinkedList &ls1, DoublyLinkedList &ls2)
{
    DoublyLinkedList ls;
    Initial(ls);
    if(isEmpty(ls1))
        return ls2;
    if(isEmpty(ls2))
        return ls1;
    if(ls1.head->data <= ls2.head->data)
    {
        InsertLast(ls, ls1.head->data);
        RemoveFirst(ls1);
    }
    else
    {
        InsertLast(ls, ls2.head->data);
        RemoveFirst(ls2);
    }
    ls = MergeSort(ls1, ls2);
    return ls;
}

這是我的主要

int main()
{
    DoublyLinkedList ls1,ls2,ls;
    Initial(ls1);
    Initial(ls2);
    Initial(ls);
    InsertLast(ls1, 9);
    InsertLast(ls1, 5);
    InsertLast(ls1, 1);
    InsertLast(ls1, 4);
    InsertLast(ls1, 3);
    InsertLast(ls2, 12);
    InsertLast(ls2, 6);
    InsertLast(ls2, 2);
    ls=MergeSort(ls1, ls2);
    Print(ls);
    return 0;
}

輸出:9 5 1 4 3 12 6 2

在查閱評論后,我修復了 function。 重用 QSort 對給定列表進行排序

DoublyLinkedList MergeSort(DoublyLinkedList &ls1, DoublyLinkedList &ls2)
{
    DoublyLinkedList ls;
    Initial(ls);
    if(isEmpty(ls1))
        return ls2;
    else if(isEmpty(ls2))
        return ls1;
    QuickSort(ls1);
    QuickSort(ls2);
    Node *p = ls1.head;
    Node *q = ls2.head;
    while(p != NULL && q != NULL)
    {
        if(p->data <= q->data)
        {
            InsertLast(ls, p->data);
            p = p->next;
        }
        else
        {
            InsertLast(ls, q->data);
            q = q->next;
        }
    }
    while(p != NULL)
    {
        InsertLast(ls, p->data);
        p = p->next;
    }
    while(q != NULL)
    {
        InsertLast(ls, q->data);
        q = q->next;
    }
    return ls;
}

這是我的子函數(InsertLast)

void InsertLast(DoublyLinkedList &ls, int data)
{
    Node *p = CreateNode(data);
    if(p == NULL)
        return;
    if(isEmpty(ls))
    {
        ls.head = ls.tail = p;
    }
    else
    {
        ls.tail->next = p;
        p->prev = ls.tail;
        ls.tail = p;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM