归并排序
【问题描述】
给定长度为N的乱序数组,请结合刚刚的程序,实现归并排序,使得数组升序排列。1<=N<=103
【输入】
第一行为一个数字N,表示数组的长度,第二行为N个数字,用空格隔开
【输出】
排序后的数组,数字之间用空格隔开
【样例输入】
8
60 71 49 11 82 49 3 66
【样例输出】
3 11 49 49 60 66 71 82
#include<iostream> using namespace std; int a[101], b[101]; void guibing(int left, int right){ // 先分解。 if(left==right) return; int mid=(left+right)/2; guibing(left, mid); guibing(mid+1, right); // 后合并。 int i=left; int j=mid+1; int k=left; // 临时数组下标。 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(int i=1; i<=right; i++) a[i]=b[i]; return; } int main(){ int n; cin>>n; for(int i=1; i<=n; i++){ cin>>a[i]; } guibing(1, n); for(int i=1; i<=n; i++){ cout<<a[i]<<" "; } return 0; }