【问题标题】:How can I use an array for multiple sort functions如何将数组用于多个排序功能
【发布时间】:2021-02-26 23:20:31
【问题描述】:

我想用一个int数组来传递多个排序方法。

ex) arr = {1, 3, 2, 9, 4} 通过插入排序、合并排序和快速排序传递 arr 并获得排序结果,但希望 arr 保持不变。

我想找到一种替代方法,而不是仅复制 arr 的内容并制作第二个数组来传递。不知道该怎么做。

【问题讨论】:

  • 想知道,通过不同的排序算法对同一个数组进行排序背后的想法是什么?你期待不同的结果吗?附言回答您的问题 - 使用 Arrays.copyOf() 并使用副本做任何您想做的事情,而原来的保持不变。
  • “我想找到一种替代方法,而不是只复制 arr 的内容” 你的意思是你自己复制元素的替代方法吗?如果是这样,那么arr2 = arr.clone() 会这样做。
  • 分析排序技术的学校项目@PavelSmirnov
  • 是和不是。我希望能够使用相同的数组 (arr) 而不必对其进行克隆或复制。 @安德烈亚斯

标签: java arrays sorting


【解决方案1】:

如果您希望arr 保持不变,您必须创建数组的副本。你别无选择。

您可以选择复制数组的方式:

  • clone()推荐,但有些人讨厌这种方法,即使它是最好的选择。

    int[] arr2 = arr.clone();
    

    所有数组都实现clone() 方法,如圣经所说,即Java 语言规范10.7. Array Members 部分:

    public 方法clone,它覆盖类Object 中的同名方法,并且不抛出任何检查异常。数组类型T[]clone方法的返回类型是T[]

    多维数组的克隆是浅的,也就是说它只创建一个新数组。子数组是共享的。

  • Arrays.copyOf()(Java 6+)clone() 的良好替代品,但更冗长,需要 import

    int[] arr2 = Arrays.copyOf(arr, arr.length);
    
  • System.arraycopy().

    int[] arr2 = new int[arr.length];
    System.arraycopy(arr, 0, arr2, 0, arr.length);
    
  • 手动复制内容,即您要求的替代内容。

    int[] arr2 = new int[arr.length];
    for (int i = 0; i < arr.length; i++)
        arr2[i] = arr[i];
    

【讨论】:

    【解决方案2】:

    您可以创建一个返回您想要的相同数组的函数。

    示例

    int[] getMyArray(){
        return new int[]{1, 3, 2, 9, 4};
    }
    

    【讨论】:

      【解决方案3】:

      如果我对您的理解正确,那么在排序期间保留数组非常容易,只需多做一点工作。数组大小是最终的,但其中的值不是,所以你可以交换它们。

      简单示例:

       int[] arr = new int[] {1, 3, 2, 9, 4};
       int first = arr[0];
       int second = arr[1];
       arr[0] = second;
       arr[1] = first;
      

      现在根据排序算法,您可能需要第二个数组,但最后,只要大小不变,您始终可以将值复制回第一个数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 2020-04-19
        • 2014-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多