本题用到了递归思想,如看不懂可以先去看汉诺塔问题。
题目是这样的输入数量n,然后输入n个数对其进行排序。
#include<iostream>
using namespace std;
void Merge(int a[],int left,int mid,int right){
int *b = new int[right-left+1];
int i= left,j=mid+1,k=0;
while(i<=mid && j<=right){
if(a[i]<=a[j])
b[k++]=a[i++];
else
b[k++]=a[j++];
}
while(i<=mid) b[k++]=a[i++];//将剩余的加入数组
while(j<=right) b[k++]=a[j++];
for(i = left,k=0;i<=right;i++)//放入原数组
a[i]=b[k++];
} //对俩个数组进行排序和合并
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,right); //合并操作
}
}
int main(){
int n,a[1000];
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
MergeSort(a,0,n-1);
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
样例