归并排序的原理:
(1)首先,把一个数组以中间元素为界限分成两组;
(2)然后“左边数组”和“右边数组”中的元素分别进行比较;
(3)最后合并两个已经排好顺序的数组,我们称之为归并排序。
#include <iostream>
#include <stdlib.h>
using namespace std;
/*******************************************/
/* 归并排序
/******************************************/
void Merge(int array[], int left, int mid, int right, int temp[]) //合并
{
int i = left; //左数组的下标array[i]{left ... mid}
int j = mid + 1; //右数组的下标array[j]{mid+1 ... right}
int k = 0; //k是temp数组的下标
while (i <= mid && j <= right)
{
if (array[i] <= array[j])
{
temp[k++] = array[i++];
}
else
{
temp[k++] = array[j++];
}
}
while (i <= mid) //把剩余的元素放到temp数组中
{
temp[k++] = array[i++];
}
while (j <= right) //把剩余的元素放到temp数组中
{
temp[k++] = array[j++];
}
for (i = 0; i < k; i++) //更新原始数组元素
{
array[lef