第一行输入数组中数字个数,第二行输入一组待排序数字,输出排序后的数字
代码
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
//二路归并排序,输出
const int maxn = 100;
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 i = 0;i <index;i++){
A[L1 + i] = temp[i];
}
}
void mergeSort(int A[],int left,int right){
if(left <right){
int mid = (left + right)/2;
mergeSort(A,left,mid);
mergeSort(A,mid + 1,right);
merge(A,left,mid,mid + 1,right);
}
}
int main(){
int A[maxn];
int n;
while(scanf("%d",&n) != EOF){
for(int i = 0;i <n;i++){
scanf("%d",&A[i]);
}
mergeSort(A,0,n-1);
for(int j = 0;j <n;j++){
printf("%d ",A[j]);
}
printf("\n");
memset(A,0,sizeof(A));
}
return 0;
}