归并排序(merge sort)
Posted qiang-wei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序(merge sort)相关的知识,希望对你有一定的参考价值。
1.归
ListNode* sortList(ListNode* head) { if (head == nullptr || head->next == nullptr) return head; // 1.将待排序序列分为两部分 ListNode* pre = nullptr, *slow = head, *fast = head; while(fast != nullptr && fast->next != nullptr) { pre = slow; slow = slow->next; fast = fast->next->next; } pre->next = nullptr; // 2.对两个子部分再次进行划分 ListNode* l1 = sortList(head); ListNode* l2 = sortList(slow); // 3.合并 return merge(l1, l2); }
2.并
ListNode* merge(ListNode* l1, ListNode* l2) { ListNode* p = nullptr; if(l1->val < l2->val) { p = l1; l1 = l1->next; } else { p = l2; l2 = l2->next; } ListNode* l = p; while(l1 != nullptr && l2 != nullptr) { if(l1->val < l2->val) { p->next = l1; l1 = l1->next; } else { p->next = l2; l2 = l2->next; } p = p->next; } if (l1 != nullptr) p->next = l1; if (l2 != nullptr) p->next = l2; return l; }
以上是关于归并排序(merge sort)的主要内容,如果未能解决你的问题,请参考以下文章