C++歸併排序

#include <iostream>
using namespace std;
void h(int a[],int a1[],int x,int t,int y){
	int z=x;
	int v=t+1;
	int k=x;
	while(x<=t&&v<=y){
		if(a[x]<a[v]){
			a1[k]=a[x];
			k++;
			x++;
		}
		else{
			a1[k]=a[v];
			k++;
			v++;
		}
	}
	while(x<=t){
		a1[k]=a[x];
		k++;
		x++;
	}
	while(v<=y){
		a1[k]=a[v];
		k++;
		v++;
	}
	for(int i=z;i<=y;i++){
		a[i]=a1[i];
	}
}
void m(int a[],int a1[],int x,int y){
	if(x<y){
		int t=(x+y)/2;
		m(a,a1,x,t);
		m(a,a1,t+1,y);
		h(a,a1,x,t,y);
	}
}

int main(){
	int n,a[105],a1[105]={0};
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	m(a,a1,0,n-1);
	for(int i=0;i<n;i++){
		cout<<a[i]<<" ";
	}
}
相關文章
相關標籤/搜索