归并排序
#include<bits/stdc++.h>
using namespace std;
const int Max=10000;
int a[Max];
void merge(int* a,int l1,int r1,int l2,int r2) {
int L1=l1,L2=l2,index=0,temp[Max]= {0};
while(L1<=r1&&L2<=r2) {
if(a[L1]>=a[L2]) {
temp[index++]=a[L2++];
} else if(a[L1]<a[L2]) {
temp[index++]=a[L1++];
}
}
while(L1<=r1) {
temp[index++]=a[L1++];
}
while(L2<=r2) {
temp[index++]=a[L2++];
}
for(int i=0;i<index;i++){
a[l1+i]=temp[i];
}
}
void mergesort(int* a,int l,int r) {
if(l<r) {
int mid=(l+r)/2;
mergesort(a,l,mid);
mergesort(a,mid+1,r);
merge(a,l,mid,mid+1,r);
}
}
int main() {
int n;
while(cin>>n) {
int left=0,right=n-1;
for(int i=0; i<n; i++) {
cin>>a[i];
}
mergesort(a,left,right);
for(int i=0; i<n; i++) {
cout<<a[i]<<" ";
}
cout<<endl;
}
return 0;
}
using namespace std;
const int Max=10000;
int a[Max];
void merge(int* a,int l1,int r1,int l2,int r2) {
int L1=l1,L2=l2,index=0,temp[Max]= {0};
while(L1<=r1&&L2<=r2) {
if(a[L1]>=a[L2]) {
temp[index++]=a[L2++];
} else if(a[L1]<a[L2]) {
temp[index++]=a[L1++];
}
}
while(L1<=r1) {
temp[index++]=a[L1++];
}
while(L2<=r2) {
temp[index++]=a[L2++];
}
for(int i=0;i<index;i++){
a[l1+i]=temp[i];
}
}
void mergesort(int* a,int l,int r) {
if(l<r) {
int mid=(l+r)/2;
mergesort(a,l,mid);
mergesort(a,mid+1,r);
merge(a,l,mid,mid+1,r);
}
}
int main() {
int n;
while(cin>>n) {
int left=0,right=n-1;
for(int i=0; i<n; i++) {
cin>>a[i];
}
mergesort(a,left,right);
for(int i=0; i<n; i++) {
cout<<a[i]<<" ";
}
cout<<endl;
}
return 0;
}