#include <iostream>
#include <cstdio>
using namespace std;
const int N = 10010; //定义数组长度
int arr[N], temp[N]; //定义待排序数组arr[]和临时数组temp[]
void Merge_sort(int arr[], int temp[], int low, int high); //声明归并排序函数
int main()
{
int n; cin >> n; //输入需要的数组长度
for(int i = 0; i < n; i++) cin >> arr[i]; //输入数据
Merge_sort(arr, temp, 0, n-1);
for(int i = 0; i < n; i++) cout << arr[i] << " "; //输出数据
return 0;
}
//定义归并排序函数,参数为待排序数组arr[],临时数组temp[],排序区间[low,high]
void Merge_sort(int arr[], int temp[], int low, int high)
{
if(low >= high) return; //当low>=high时退出函数
int mid = low + high >> 1; //找出区间的中间下标mid
int l = low, h = mid+1, k = 0; //用l遍历前半区间,用h遍历后半区间
//将数组arr区分为两部分
Merge_sort(arr, temp, low, mid); //前半区间[low,mid]
Merge_sort(arr, temp, mid+1, high); //后半区间[mid+1,high]
//当两个下标都在各自区间内时进行相互比较
//找出较小值放进temp[]中,并将下标后移,知道某一个数组超出范围为止
while(l <= mid && h <= high)
{
if(arr[l] < arr[h]) temp[k++] = arr[l++];
else temp[k++] = arr[h++];
}
//将另一数组按顺序放入temp中
while(l <= mid) temp[k++] = arr[l++];
while(h <= high) temp[k++] = arr[h++];
//将temp[]复制给arr[]
for(int i = low, j = 0; i <= high; i++, j++) arr[i] = temp[j];
}
欢迎大家探讨