算法导论_第二章_2.3-1_归并排序

算法导论第三版,第二章,第17页,归并排序 MERGE_SORT

我们先完成对两个已有序数组的排列

#include<iostream>
#include<limits.h>
using namespace std;
 
void merge(int A[],int p,int q,int r)
{
	int n1=q-p+1;
	int n2=r-q;
	
	int L[n1+1],R[n2+1];
	for(int i=0;i<n1;i++)
	{
		L[i]=A[p+i];
	}
	for(int i=0;i<n2;i++)
	{
		R[i]=A[q+i+1];
	}
	L[n1]=INT_MAX;
	R[n2]=INT_MAX;
	int i=0,j=0;
	for(int k=p;k<=r;k++)
	{
		if(L[i]<R[j])
		{
			A[k]=L[i];
			i++;
		}
		else
		{
			A[k]=R[j];
			j++;
		}
	}
	 
} 

再每层完成递归

void merge_sort(int A[],int p,int r)
{
	if(p<r)
	{
		int q=(r+p)/2;
		merge_sort(A,p,q);
		merge_sort(A,q+1,r);
		merge(A,p,q,r);
	}
}

int main()
{
	int A[]={1,3,5,4,8,1,2,5,6,7,9,2,1,3,5,4,6,1,6,9};
	for(int i=0;i<20;i++)
	{
		cout<<A[i]<<" ";
	}
	cout<<endl;
	merge_sort(A,0,19);
	for(int i=0;i<20;i++)
	{
		cout<<A[i]<<" ";
	}
	cout<<endl;
}


猜你喜欢

转载自blog.csdn.net/skying_/article/details/80152141