非递归合并排序

#include<iostream>
using namespace std;
#include<stdio.h>
int b[5];

template<class Type>
void Merge(Type c[],Type d[],int l,int m,int r){
	
	int i = l,j = m+1,k = l;
	while( (i <= m) && (j <= r) )
	{
		if(c[i] <= c[j])
			d[k++] = c[i++];
		else
			d[k++] = c[j++];
	}
	if(i > m)
		
		for(int q = j;q <= r;q++)
			d[k++] = c[q];
		else
			for(int q=i;q<=m;q++)
				d[k++] = c[q];
			
			
			for(int q = l;q <= r;q++)
				c[q] = d[q];
			
}

template<class Type>
void MergePass(Type x[],Type y[],int s,int n){
	int i = 0;
	while(i <= n - 2*s){
		Merge(x,y,i,i+s-1,i+2*s-1);
		i = i+ 2*s;
		
	}
	
	if(i + s < n)
		Merge(x,y,i,i+s-1,n-1);
	else
		for(int j = i;j<= n-1;j++)
			y[j] = x[j];
		
}


template<class Type>
void MergeSort(Type a[],int n){
	int s = 1;
	while(s < n){
		MergePass(a,b,s,n);
		s = 2*s;	
	}	
}

void main(){
	
	int a[5] = {1,4,7,2,3};
	MergeSort(a,5);
	for(int i=0;i<5;i++)
		cout<<a[i]<<" ";
	cout<<endl;
}

你可能感兴趣的:(非递归合并排序)