算法導論_第二章_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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章