归并排序(无哨兵实现)

it2022-05-24  70

void Merge(int *a, int ileft, int imid, int iright) //辅助函数{    int n1 = imid - ileft + 1;      int n2 = iright - imid;      int *Larray = new int[n1];    int *Rarray = new int[n2];    //分解    for(int i = 0; i <= n1 - 1; i++)    {        Larray[i] = a[ileft+i];    }    for(int j = 0; j <= n2 - 1; j++)    {        Rarray[j] = a[imid+1+j];    }    //合并    int i = 0, j =0;    for(int k = ileft; k <= iright; k++)    {        if(i==n1) //Larray中已无元素(i越界)        {            a[k] = Rarray[j];            j++;        }        else if(j==n2) //Rarray中已无元素(j越界)        {            a[k] = Larray[i];            i++;        }        else        {            if(Larray[i]<=Rarray[j])            {                a[k] = Larray[i];                i++;            }            else            {                a[k] = Rarray[j];                j++;            }        }    }    delete []Larray;    delete []Rarray;}void MergeSort(int *a, int ileft, int iright)  //接口{    if(ileft < iright)    {        int imid = (ileft + iright) / 2;        MergeSort(a, ileft, imid);        MergeSort(a, imid+1, iright);        Merge(a, ileft, imid, iright);    }}

转载于:https://www.cnblogs.com/xly0713/p/3188011.html


最新回复(0)