繁体   English   中英

使用一个数组合并排序

[英]Merge sort using one array

我的合并排序算法如下:

众所周知,该算法需要额外的内存。 有什么方法可以只对一个数组进行排序吗? (按单个数组排序。)

我的合并排序算法是:

//LeftPos = start of left half;
//RightPos = start of right half
void  Merge(int A[ ], int LeftPos, int RightPos, int RightEnd) 
{
    int LeftEnd = RightPos – 1;
    int TmpPos = 1
    int NumElements = RightEnd – LeftPos + 1;
    int TempArray[NumElements];
    while(leftPos <= LeftEnd && RightPos <= RightEnd)
        if(A[LeftPos] <= A[RightPos])
            TmpArray[TmpPos++] = A[LeftPos++];
        else
            TmpArray[TmpPos++] = A[RightPos++];
    while(LeftPos <= LeftEnd)   //Copy rest of first half   
        TmpArray[TmpPos++] = A[LeftPos++];
    while(RightPos <= RightEnd) //Copy rest of second half      TmpArray[TmpPos++] = A[RightPos++];
    for(int i = 1; i <= NumElements; i++) //Copy TmpArray back
        A[LeftPos++] = TmpArray[i];
}

检查以下链接:

如何使用合并排序算法进行就地排序?

符合您问题的Java代码:

https://github.com/bakeraj4/In-Place-Merge-Sort/blob/master/mergeMain.java

您正在寻找的技术是“就地”的,为了将来进行搜索,您可以使用它在互联网上找到更好的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM