归并排序

来源:互联网 发布:网络数据分析 编辑:程序博客网 时间:2024/06/11 06:34

二路归并排序

时间复杂度:O(nlogn)
空间复杂度:O(n)
稳定性:稳定
Note: 实现时应注意空间复杂度的控制。

代码:

#include <iostream>#include <stdio.h>#define MAXSIZE 20using 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;}
原创粉丝点击