数据结构之归并排序

来源:互联网 发布:天下无人不通共 知乎 编辑:程序博客网 时间:2024/05/18 01:06
#include <iostream>using namespace std;//subArrLen为有序子数组的长度,//一次二路归并排序后的有序子序列存于数组swap中void Merge(int a[],int n,int swap[],int subArrLen){    int l1=0;//第一个有序子数组下界为0    int l2=0,u1=0,u2=0;    int i=0,j=0;    int m=0;    while(l1+subArrLen<=n-1)    {        l2=l1+subArrLen;        u1=l2-1;        u2=(l2+subArrLen-1<=n-1)?l2+subArrLen-1:n-1;        for(i=l1,j=l2;(i<=u1 && j<=u2);m++ )        {            if(a[i]<=a[j])            {                swap[m]=a[i];                i++;            }            else            {                swap[m]=a[j];                j++;            }        }        while(i<=u1)        {            swap[m]=a[i];            m++;            i++;        }        while(j<=u2)        {            swap[m]=a[j];            m++;            j++;        }        l1=u2+1;    }    for(i=l1;i<n;i++,m++)    {        swap[m]=a[i];    }}void MergeSort(int a[],int n){    int *swap=new int[n];    int subArrLen=1;    while(subArrLen<n)    {        Merge(a,n,swap,subArrLen);        for(int i=0;i<n;i++)        {            a[i]=swap[i];        }        subArrLen*=2;    }    delete []swap;}int main(){    int a[]={6,5,4,3,2,1};    MergeSort(a,6);    for(int i=0;i<6;i++)    {        cout<<a[i]<<' ';    }    cout<<endl;    return 0;}
0 0
原创粉丝点击