基础排序算法----归并排序

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。时间复杂度为O(n log n) 。

#include
using namespace std;
int a[100];
int b[100];
void Merge(int a[],int s1,int e1,int s2,int e2,int b[])
{
	int k=s1,i=s1;
	while(s1<=e1&&s2<=e2)
	{
		if(a[s1]<=a[s2])
			b[k++]=a[s1++];
		else
			b[k++]=a[s2++];
	}
	while(s1<=e1)
		b[k++]=a[s1++];
	while(s2<=e2)
		b[k++]=a[s2++];
	k--;
	while(k>=i)
	{
		a[k]=b[k];
		k--;
	}	
}
void MergeSort(int a[],int x,int y,int b[])
{
	int mid;
	if(x<y)
	{
		mid=(x+y)/2;
		MergeSort(a,x,mid,b);
		MergeSort(a,mid+1,y,b);
		Merge(a,x,mid,mid+1,y,b);
	}
}
int main()
{
	int n,i;
	cin>>n;
	for(i=0;i<n;i++)
		cin>>a[i];
	MergeSort(a,0,n-1,b);
	for(i=0;i<n;i++)
		cout<<a[i]<<' ';
}

你可能感兴趣的:(数据结构,算法设计,排序算法,归并排序)