c++实现链表归并排序
来源:互联网 发布:非洲的基础网络情况 编辑:程序博客网 时间:2024/06/18 17:12
一. 定义节点
struct node { int data; node* next; node(int data = 0, node* next = NULL) :data(data), next(next) {}};
二. 归并排序主体结构
void mergesort(node*& head) { if(head->next) { node* mid = cut(head); mergesort(head); mergesort(mid); head = merge(head, mid); }}
三. cut函数, 将一条链表从中间断开, 返回后一条链表的头
实现方法是: 让两个指针同时走, 其中一个是另一个的速度的两倍
node* cut(node*& head) { node* p = head; node* q = head; node* second_head; while(q && q->next) { q = q->next; if(q->next) { p = p->next;) q = q->next; } } second_head = p->next; p->next = NULL; return second_head;}
四. merge函数, 将两条有序(小到大的顺序)的链表按顺序合并(合并后也是有序的了)
算法: 两个指针分别指向两个链表的头, 每一次”取出”两个指针指向的节点当中值较小的节点, 再把那个指针后移, 这样一来取出来的节点就是按从小到大的顺序.
node* merge(node*& head, node*& mid) { node tmp; node *p = &tmp, *q = head, *t = mid; while(q && t) { if(q->data <= t->data) { p->next = q; p = p->next; q = q->next; } else { p->next = t; p = p->next; t = t->next; } } if(q) p->next = q; else p->next = t; return tmp.next;}
这样就实现了从小到大排序的归并排序的链表算法!
阅读全文
0 0
- 归并排序 c语言实现
- 归并排序C语言实现
- 归并排序C语言实现
- 归并排序--C语言实现
- 归并排序C语言实现
- 归并排序--c语言实现
- C语言实现归并排序
- 归并排序 --C语言实现
- C++:探究纯虚析构函数以及实现数组的快速排序与链表的归并排序
- 排序(6)---------归并排序(C语言实现)
- 排序算法(C实现)-------- 归并排序
- 排序算法C++&&Python实现---归并排序
- 排序算法C++&&Python实现---归并排序
- 利用归并实现链表排序
- 归并排序(静态链表实现)
- c++实现链表归并排序
- 数组和链表的归并排序算法实现(C语言)
- 归并排序算法 C代码实现
- 【noip 2016】组合数问题
- bootstrap table关于排序列添加图标的方法--查漏补缺
- python设计模式(外观模式)
- linux中文件的分区
- Beginning Django.pdf 英文原版 免费下载
- c++实现链表归并排序
- Navigator is deprecated and has been removed from this package
- Android监听软键盘打开收起事件(软键盘自带收起按钮)
- java作业
- checkbox 选中事件
- PagerAdapter和FragmentPagerAdapter和FragmentStatePagerAdapter区别
- hdu2087剪花布条+hdu3746Cyclic Nacklace 【kmp复习】
- C# 发送邮件
- 坐标的转换