二路归并排序
时间复杂度:
O(nlogn)
空间复杂度:
O(n)
稳定性:稳定
Note: 实现时应注意空间复杂度的控制。
代码:
#include <iostream>
#include <stdio.h>
#define MAXSIZE 20
using namespace std;
int mSq[MAXSIZE],tempSq[MAXSIZE];
void MergeSql(int Sq1[],int s,int m,int t)
{
int i=s,j=m+1,k=s;
for(;i<=m&&j<=t;k++)
{
if(Sq1[i]<=Sq1[j])
tempSq[k]=Sq1[i++];
else
tempSq[k]=Sq1[j++];
}
while(i<=m)
tempSq[k++]=Sq1[i++];
while(j<=t)
tempSq[k++]=Sq1[j++];
for(i=s;i<=t;i++)
Sq1[i]=tempSq[i];
}
void MergeSort(int SqA[],int s,int t)
{
if(s!=t)
{
int m=(s+t)/2;
MergeSort(SqA,s,m);
MergeSort(SqA,m+1,t);
MergeSql(SqA,s,m,t);
}
}
int main()
{
int length=6;
for(int i=0;i<length;i++)
scanf("%d",&mSq[i]);
MergeSort(mSq,0,5);
for(int i=0;i<length;i++)
printf("%d ",mSq[i]);
printf("\n");
return 0;
}