链表的归并排序
来源:互联网 发布:java开发的简单小游戏 编辑:程序博客网 时间:2024/06/07 04:49
归并排序是典型的分治算法思想:
通过不断递归地将链表划分为两部分,直到不能划分为止,回溯时合并前后两段分别有序的链表,直到得到原始链表的有序状态,整个排序过程时间复杂度为
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* sortList(ListNode* head) { if(head==NULL || head->next==NULL) return head; ListNode *fast=head,*slow=head; //用快指针和慢指针找到链表中点 while(fast->next && fast->next->next){ fast=fast->next->next; slow=slow->next; } //把链表分成两部分 fast=slow->next; slow->next=NULL; //排序左半部分 ListNode *l1=sortList(head); //排序右半部分 ListNode *l2=sortList(fast); //合并有序链表 return mergeTwoSortedList(l1,l2); } ListNode * mergeTwoSortedList(ListNode* l1,ListNode*l2){ ListNode dummy(-1); ListNode * p=&dummy; while(l1 && l2){ //从当前两个有序链表头中选择一个较小的节点链接至有序的链表中 if(l1->val<=l2->val){ p->next=l1; l1=l1->next; }else{ p->next=l2; l2=l2->next; } p=p->next; } if(l1) p->next=l1; if(l2) p->next=l2; return dummy.next; } };
阅读全文
0 0
- 链表的归并排序
- 链表的归并排序
- 链表的归并排序
- 链表的归并排序
- 链表的归并排序
- 链表的归并排序
- 链表的归并排序
- 链表的归并排序
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 链表归并排序
- 归并排序链表
- 链表归并排序
- 链表归并排序
- 计算机博弈-最大最小搜索,Alpha-Beta搜索
- 反向传播
- React Native导航器之react-navigation使用
- 数塔
- springWebsocket
- 链表的归并排序
- 用异或运算实现两个数字的交换(装x)
- 感知机/Pytorch—笔记
- JS中的系统对象
- 洛谷 P3817 小A的糖果
- django {{ MEDIA_URL }}值为空
- Python笔记
- Leetcode之Container With Most Water 问题
- 冒泡小例子