直接看代码就行 ^ _ ^
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
// 合并两个数组,其中L1,R1,L2,R2代表数组A中的两个分段,且 L1 < L2
const int maxn = 1000;
void merge(int A[], int L1, int R1, int L2, int R2)
{
int i = L1, j = L2;
int temp[maxn], index = 0;
while (i <= R1 && j <= R2)
{
if (A[i] <= A[j])
temp[index++] = A[i++];
else
temp[index++] = A[j++];
}
while (i <= R1) temp[index++] = A[i++];
while (j <= R2) temp[index++] = A[j++];
for (int k = 0; k < index; ++k)
{
A[L1 + k] = temp[k];
}
}
void mergeSort(int A[], int left, int right)
{
if (left < right)
{
int mid = left + (right - left) / 2;
// 递归分隔区间,将大区间不断分隔变小
mergeSort(A, left, mid);
mergeSort(A, mid + 1, right);
// 将左右区间合并
merge(A, left, mid, mid + 1, right);
}
}
int main()
{
int A[10] = { 7,3,4,1,8,9,0,5,2,6};
// 归并排序
mergeSort(A, 0, 9);
// 打印数组
for (const auto i : A)
cout << i << " ";
return 0;
}