归并排序
#include <iostream>
#include <cstdio>
using namespace std;
void combineNum(int left,int middle,int right){
int i = left;
int j = middle+1;
int k = left;
while(i <= middle && j <= right){
if(arr[i] <= arr[j]){
temp[k++] = arr[i++];
}else{
temp[k++] = arr[j++];
}
}
while (i <= middle){
temp[k++] = arr[i++];
}
while (j <= right){
temp[k++] = arr[j++];
}
for (int l = left; l <= right; ++l) {
arr[l] = temp[l];
}
}
void mergeSort(int left,int right){
if(left < right){
int middle = left + (right - left)/2;
mergeSort(left,middle);
mergeSort(middle+1,right);
combineNum(left,middle,right);
}
}
/**
* 归并排序的算法实现
*/
int main(){
int n;
while(scanf("%d",&n)!= EOF){
for (int i = 0; i < n; ++i) {
scanf("%d",&arr[i]);
}
mergeSort(0,n-1);
for (int j = 0; j < n; ++j) {
printf("%d ",arr[j]);
}
printf("\n");
}
}