时间复杂度是 O(nlogn) 的排序算法包括归并排序、堆排序和快速排序。快速排序的最差时间复杂度是 O(n2),其中最适合链表的排序算法是归并排序。
二路归并:
使用双指针即可完成二路归并
ListNode* mergeSort(ListNode* head){
if(!head || !head->next) return head;
ListNode* midNode = findMid(head);
ListNode* l1=head, *l2=midNode->next;
midNode->next=nullptr;
return merge(mergeSort(l1),mergeSort(l2));
}
多路归并:
多路归并需借助堆的数据结构
1. 建堆:先将一组元素建成最小堆
2. 堆中元素的删除和加入:每当踢出一个元素时,加入该组中的下一个元素
题目: