当前位置: 首页 > 知识库问答 >
问题:

对列表执行合并排序,但原始的一次仍然未排序[关闭]

徐栋
2023-03-14

编辑问题以包括所需的行为、特定问题或错误,以及再现问题所需的最短代码。这将帮助其他人回答这个问题。

所以我在这里,开始了我的编码之旅,在学习后开始研究合并排序,但遇到了一个问题。看,我已经实现了合并排序算法。当我尝试从方法打印列表时,它会打印一个排序的列表。但是一旦我尝试打印传递给实际需要排序的方法的原始列表。没有。它仍然是未排序的。

所以,我希望有人能帮我。我不能把代码,因为它是我的大学项目。

谢啦!

共有1个答案

狄誉
2023-03-14

虽然Java是按值传递的,但对于列表,传递的是对对象列表的引用。只要代码对对象进行排序,原始列表就会被排序。

例如,数组上自下而上合并排序的部分代码:

    public static void sort(int[] a) {
        int n = a.length;
        if(n < 2)
            return;
        int[] dst = new int[n];
        int[] src = a;
        int[] tmp;
        for(int sz = 1; sz < n; sz = sz+sz){
            for(each merge sort pass){
                // merge sort pass from src[] to dst[]
            }
            tmp = src;                  // swap references
            src = dst;
            dst = tmp;
        }
        if(src != a)                    // copy back to a if needed
            System.arraycopy(src, 0, a, 0, n);
    }
 类似资料:
  • 我正试图想出一个分而治之的算法来合并j个排序列表和n个元素,但我被卡住了;我不知道如何把这个问题分成更小的子问题。我希望合并算法更高效,如下所示: 合并前两个列表;然后将结果列表与第三个列表合并;然后将结果列表与第四个列表合并,以此类推,该列表取O(j*jn)。

  • 我在一次编码竞赛中遇到了以下问题。我试了很多,但是一个私人测试用例总是因为错误的答案而失败,我无法弄清楚为什么我的以下方法会失败。我没有简单的解决方案来生成压力测试用例并进行比较。此外,也不会发表社论。所以,如果可能的话,我正在寻找一个人来指出我方法中的缺陷。 下面是对问题的详细描述,以及我迄今为止所做的尝试。 问题:有多个区域,您将根据每个区域的学生在各自区域中的排名获得分数。例如: 在上述数据

  • 问题内容: 该中应该是未排序,但被相对于分类。 我遇到了这个问题,因为我需要插入顺序数据。因此,我改用了。但是我还是很困惑为什么要对它进行排序。 有人可以解释吗? 我做了一个简单的例子来查看排序。 结果: 编辑: 我试图插入使用50支随机数的,我发现了一些数据未排序。但是,它仍然设法对大多数整数进行排序。 随机结果: 问题答案: 这是一个巧合(不是真的,而是与哈希算法有关)。 尝试添加 最后。 输

  • 我有两个数据集,df1和df2,其中: 我想对date和name列执行“内部联接”,但是,我也希望对一些列重新排序。 df1 df2 预期结果 这就是我正在做的 //更改列的顺序 但是,我无法使用上述语法加入。如有任何建议,我们将不胜感激

  • 这些是家庭作业问题,但我想了解它们背后的概念,而不仅仅是得到答案。 我知道MergeSort的运行时间是O(nlogn)。似乎合并方法必须运行 n 次(因为它必须合并所有数组,最终会有 n 个数组)。因此,我想我可以推断出 MergeSort() 方法将被称为 logn times。我也认为这是有道理的,因为它正在划分数组,所以它会一直将自己除以 2,所以 logn。 因此,我觉得答案分别是C和A

  • 双向合并排序与递归合并排序有何不同? 假设在合并排序中有5个数字需要排序8,9,1,6,4,我们按如下步骤1进行划分:{8,9,1}{6,4} 步骤2:{8,9}{1}{6}{4} 步骤3:{8}{9}{1}{6}{4} 现在合并 步骤4:{8,9}{1}{4,6} 步骤5:{1,8,9}{4,6} 第六步:{1,4,6,8,9} 但在双向合并排序中,我们将数组分为两个元素(但根据维基百科,在合并