struct Node
{
int data;
Node *next;
Node (int data = 0, Node *next = NULL) : data(data), next(next) {}
};
Node *merge(Node *p, Node *q)
{
Node *pos = NULL, *head = NULL;
while (p || q)
{
if (!q || (p && p->data >= q->data))
{
if (!pos) pos = head = p;
else
{
Node *pNext = p->next;
pos->next = p;
pos = p;
p = pNext;
}
} else
{
if (!pos) pos = head = q;
else
{
Node *pNext = q->next;
pos->next = q;
pos = q;
q = pNext;
}
}
}
return head;
}
Node *mergeSort(Node *p, int n)
{
if (n < 2) return p;
int mid = n >> 1;
Node *q = p;
for (int i = 0; i < mid - 1; i++) q = q->next;
Node *pNext = q->next; q->next = NULL; q = pNext;
return merge( mergeSort(p, mid), mergeSort(q, n - mid) );
}
单向链表归并排序
最新推荐文章于 2024-07-24 15:28:00 发布