#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
今日推荐
周排行