归并排序
#include<bits/stdc++.h>
using namespace std;
int arr[100001];
int i,j,n;
void meage(int arr[],int arrtemp[],int left,int mid,int right)
{
int left1=left;
int right1=mid+1;
int pop=left;
while(left1<=mid && right1<=right)
{
if(arr[left1]<arr[right1])
{
arrtemp[pop++]=arr[left1++];
}
else
{
arrtemp[pop++]=arr[right1++];
}
}
while(left1<=mid)
{
arrtemp[pop++]=arr[left1++];
}
while(right1<=right)
{
arrtemp[pop++]=arr[right1++];
}
while(left<=right)
{
arr[left]=arrtemp[left];
left++;
}
}
void msort(int arr[],int arrtemp[],int left,int right)
{
if(left<right)
{
int mid=(left+right)/2;
msort(arr,arrtemp,left,mid);
msort(arr,arrtemp,mid+1,right);
meage(arr,arrtemp,left,mid,right);
}
}
void moni(int arr[],int n)
{
int *arrtemp=(int *)malloc(n * sizeof(int));
if(arrtemp)
{
msort(arr,arrtemp,0,n-1);
free(arrtemp);
}
}
int main()
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
cin>>arr[i];
}
moni(arr,n);
for(i=0;i<n;i++)
{
printf("%d ",arr[i]);
}
return 0;
}