归并排序时将两个或两个以上的有序序列组合成一个大的有序表。如果是两个合并成一个就是2路归并排序。
本文针对2路归并排序。
时间上,归并排序需要执行logn次,每次又要比较所有元素,因此时间复杂度是nlogn,且不随原数据排布好坏而改变,因此比较稳定。而且速度仅次于快速排序。
空间上,用到递归并且需要多次开辟空间存放合并后的序列,因此在内存紧张的芯片上不宜采用。
程序:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define MAXSIZE 50
#define N 15
typedef struct{
int key;
int other;
}node;
typedef struct
{
node array[MAXSIZE + 1];
int length;
}list;
/*将有序序列list1[from--middle]和list1[