1.概念
归并排序对序列的元素进行逐层折半分组,然后从最小分组开始比较排序,合并成一个大的分组,逐层进行,最终所有的元素都是有序的。
2.算法原理
- 这是一个无序数列:5,2,9,1,4,7,8,3 ,我们将序列的元素进行逐层折半分组,直到不可拆分为止,
- 然后再逐层合并,首先对第一层序列2,5进行合并创建一个大序列,序列长度为两个小序列长度之和,
- 接着继续合并
3.代码
递归实现
#include <iostream>
#define MAXSIZE 10
using namespace std;
//进行对拆分的序列有序合并
void mergeing(int *Left, int Left_size, int *Right, int Right_size)
{
int i = 0, j = 0, k = 0;
int Marr[MAXSIZE] = {
0 }; //临时存放合并的序列
while (i < Left_size && j < Right_size)
{
if (Left[i] < Right[j])
{
Marr[k++] = Left[i++];
}
else
{
Marr[k++] = Right[j++];
}
}
//如果Left序列中有剩余元素
while (i < Left_size)
{
Marr