博主身为大二萌新,第一次学习数据结构,自学到排序的时候,对于书上各种各样的排序算法顿觉眼花缭乱,便花了很长的时间尽力把每一个算法都看懂,但限于水平有限,可能还是理解较浅,于是便将它们逐个地整理实现出来,以便加深理解。
归并排序就是通过将一个具有n个key记录的线性表,看成是具有n个有序子序列的排序叠加来实现对原有序列的排序的一种算法。它的中间状态就是将所有的子序列长度变为1,再将它们两两进行归并,得到长度为2或1的次级子序列,之后再进行两两归并,如此反复,直到得到一个长度为n的有序序列。这个过程包含了很多次的切分与归并,可以通过递归的方式来实现。归并排序的改进形式没有使用耗时较大的递归,而是改用了迭代法,这里我们先来讨论比较基础的递归法。
一共分成两个函数,一个是切分归并函数,另一个则是实现归并的函数。
话不多说,先粘贴我根据算法实现出来的源代码。
运行环境:win10&vs2015&.cpp或.c后缀文件形式
#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"
#include <string.h>
#include<cstdlib>
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef int Status;
typedef struct {//一个简单的线性链表结构
int *Data;//线性链表的初址
int length;
}SqList;
/*线性链表初始化函数*/
Status InitSqList(SqList *S) {
int n;
prin