C++ 链表实现的归并排序
首先是定义和创建两个链表用来排序
typedef int ElemType;
typedef struct LNode {
ElemType data;
struct LNode * next;
}LinkNode;
void CreateListF(LinkNode * &L, ElemType a[], int n) {
LinkNode *s;
L = (LinkNode *)malloc(sizeof(LinkNode));
L->next = NULL;
for (int i = 0 ; i < n; i ++) {
s = (LinkNode *)malloc(sizeof(LinkNode));
s->data = a[i];
s->next = L->next;
L->next = s;
}
}
void CreateListR(LinkNode *& L, ElemType a[], int n) {
LinkNode *s,*p;
L = (LinkNode *)malloc(sizeof(LinkNode));
L->next = NULL;
p = L;
for (int i = 0 ; i < n ; i ++) {
s = (LinkNode *)malloc(sizeof(LinkNode));
s->data = a[i];
p->next = s;
p = s;
}
p->next = NULL;
}
这里提供了头插法和尾插法两种方式创建链表
归并的思想很重要 充分利用了原有数组的有序性
这里是归并的主要过程