单链表(排序,归并排序)
2018-03-20 09:56
441 查看
#include <bits/stdc++.h> typedef int ElemType; #define Status int #define ERROR 0 #define OK 1 using namespace std; typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList; Status GetElem_L(LinkList L,int i,ElemType &e) { LinkList p=L->next; int j=1; while(p&&j<i) { p=p->next; if(!p) return ERROR; j++; } e=p->data; return OK; } Status ListInsert_L(LinkList &L,int i,ElemType e) { LinkList p=L; int j=0; while(p&&j<i-1) { p=p->next; j++; if(!p)return ERROR; } LinkList s=(LinkList)malloc(sizeof(LNode)); s->next=p->next;p->next=s; s->data=e; return OK; } Status ListDelete_L(LinkList &L,int i,ElemType &e) { LinkList p=L; int j=0; while(p&&j<i-1) { p=p->next;j++; if(!p) return ERROR; } LinkList q=p->next; p->next=q->next; e=q->data; free(q); return OK; } void mpsort(LinkList &LL) { int a[1000],cnt=0; LinkList p=LL->next; while(p) { a[cnt++]=p->data; p=p->next; } sort(a,a+cnt); LinkList q=(LinkList)malloc(sizeof(LNode)); q->next=NULL; for(int i=0;i<cnt;i++) ListInsert_L(q,i+1,a[i]); LL=q; //free(q); } void Mergelist(LinkList &La,LinkList &Lb,LinkList &Lc) { LinkList pa,pb,pc; pa=La->next; pb=Lb->next; int cnt=1; while(pa&&pb) { if((pa->data)<=(pb->data)) { ListInsert_L(Lc,cnt++,pa->data); pa=pa->next; } else { ListInsert_L(Lc,cnt++,pb->data); pb=pb->next; } } while(pa) { ListInsert_L(Lc,cnt++,pa->data); pa=pa->next; } while(pb) { ListInsert_L(Lc,cnt++,pb->data); pb=pb->next; } } int main() { LinkList L=(LinkList)malloc(sizeof(LNode)); LinkList L1=(LinkList)malloc(sizeof(LNode)); LinkList L2=(LinkList)malloc(sizeof(LNode)); L->next=NULL; L1->next=NULL; L2->next=NULL; for(int i=1;i<8;i++) ListInsert_L(L,1,i); for(int i=5;i<13;i++) ListInsert_L(L1,1,i); mpsort(L); mpsort(L1); LinkList p=L->next; while(p) { cout<<p->data<<' '; p=p->next; } cout<<endl; p=L1->next; while(p) { cout<<p->data<<' '; p=p->next; } cout<<endl; Mergelist(L,L1,L2); p=L2->next; while(p) { cout<<p->data<<' '; p=p->next; } cout<<endl; return 0; }
相关文章推荐
- 用归并排序实现单链表的排序
- 重温几种排序算法之希尔排序、归并排序、快速排序
- 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
- 快排 选择排序 冒泡排序 归并排序 希尔排序
- 数据结构List实例(四):使用归并排序对单链表进行排序
- 排序:归并排序
- 处理海量数据的高级排序之——归并排序(C++)
- 简单选择排序、直接插入排序、归并排序
- Java单链表归并排序
- 选择排序与归并排序
- 排序--归并排序
- 每天学习算法系列—内部排序之归并排序和快速排序
- 快速排序,归并排序
- 归并排序对整形数组排序
- 排序-归并排序
- 四道有趣的单链表面试题(单链表反序、找出链表的中间元素、链表排序、判断一个单链表是否有环) (转)
- 链表初解(一)——单链表的创建、删除、插入、测长、排序、逆置
- 内部排序总结(四)归并排序
- 创建单链表,然后进行递增排序
- 排序大全【各种排序】:直接插入,折半插入,冒泡,快排,简单选择,堆排序,归并排序