爸爸写的归并,比孩子还要落后很多了(孩子学到dp和基础的图)。。
不过也要每天努力一点点,争取跟上孩子。
#include<bits/stdc++.h>
using namespace std;
int a[10005];
int b[10005];
// test merge
/*
a[0]= 3;
a[1] = 5;
a[2] = 7;
a[3] = 11;
a[4] = 13;
a[5] = 2;
a[6] = 4;
a[7] = 6;
a[8] = 14;
a[9] = 16;
merge(0,9);
*/
void m(int l,int r){
int p1 = l ,mid = (r+l)/2 , p2 = mid +1, p = l;
while( p1<=mid && p2<=r ){
if(a[p1]<=a[p2]){
b[p++] = a[p1++];
}else{
b[p++] = a[p2++];
}
}
while(p1<=mid){
b[p++] =a[p1++];
}
while(p2<=r){
b[p++] =a[p2++];
}
for(int i=l;i<=r;i++){
a[i]=b[i];
}
}
void msort(int l,int r){
if(l==r){
return ;
}
int mid = (l+r)/2;
msort(l,mid);
msort(mid+1,r);
m(l,r);
}
int main(){
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
msort(0,n-1);
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
// test No.1
/*
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
int n=5,m=5;
int a[5] = {1,3,5,9,13};
int b[5] = {0,2,4,6,8};
int c[10];
int p1=0,p2=0,p=0;
while(p1<n && p2<m){
if( a[p1]>b[p2] ){
c[p++] = b[p2];
p2++;
}else{
c[p++] = a[p1];
p1++;
}
}
while(p1<n){
c[p++] = a[p1++];
}
while(p2<m){
c[p++] = b[p2++];
}
for(int i=0;i<10;i++){
cout<<c[i]<<" ";
}
return 0;
}
*/