归并排序 学习 【标程】

爸爸写的归并,比孩子还要落后很多了(孩子学到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;
}
*/
发布了33 篇原创文章 · 获赞 0 · 访问量 167

猜你喜欢

转载自blog.csdn.net/weixin_42790071/article/details/105456046