递归排序(非递归实现)

#include<iostream>
using namespace std;

void Merge(int A[],int Tmp[],int Left, int Right,int RightEnd){
	int LeftEnd = Right - 1;
	int index = Left;
	
	
	while((Left<=LeftEnd) && (Right<=RightEnd)){
		if(A[Left]<=A[Right]){
			Tmp[index++] = A[Left++];
		}	
		else{
			Tmp[index++] = A[Right++];
		}	
	}
	
	while(Left<=LeftEnd){
		Tmp[index++] = A[Left++];
	}
	
	while(Right<=RightEnd){
		Tmp[index++] = A[Right++];
	}
}

void Merge_pass(int A[],int Tmp[], int N, int Length){
	int i,j;
	for(i = 0;i<N-2*Length;i = i + 2*Length)
	{
		Merge( A, Tmp , i , i+Length , i+2*Length-1 );
	}
	if(i+Length<N)
	{
		Merge(A,Tmp,i,i+Length,N-1);
	}
	else{
		for(j = i;j<N;j++)
		{
			Tmp[j] = A[j++];
		}
	}	
}

void MergeSort(int A[],int N)
{
	int Length = 1;
	int *Tmp=  new int[N] ;
	if(Tmp!=NULL){
		while(Length<N){
			Merge_pass(A,Tmp,N,Length);
			Length = Length*2;
			Merge_pass(Tmp,A,N,Length);
			Length = Length*2; 
		} 
		delete []Tmp;
	}
	
	else
		cout<<"空间不足"<<endl;
}

int main(){
	int A[10] = {10,9,80,21,3,4,5,67,2,10};
	for(int i = 0;i<10;i++){
		cout<<A[i]<<" ";
	}
	MergeSort(A,10);
	cout<<"\n";
	for(int i=0;i<10;i++){
		cout<<A[i]<<" ";
	}
}













猜你喜欢

转载自blog.csdn.net/weixin_37992828/article/details/80768093
今日推荐