【问题标题】:Bug in copying and sorting array复制和排序数组中的错误
【发布时间】:2017-05-14 18:39:25
【问题描述】:

这是原来的问题

创建一个方法int[] sort(int[] arr),返回一个新的排序数组(递增顺序),包含与 arr 相同的整数集。数组 arr 应保持不变。

这是方法:

private static int[] sort(int[] arr){
        int i,z=0,temp,y,x;
        int[] secondArray = new int [arr.length];
        for (i=0; i<arr.length; i++){
            secondArray[z] = arr[i];
        }
        for (y=0; y < secondArray.length; y++) {
            for (x = 0; x<secondArray.length; x++){
                if (secondArray[y] < secondArray[x]){
                    temp = secondArray[y];
                    secondArray[y] = secondArray[x];
                    secondArray[x] = temp;
                }
            }
        }
        return secondArray;
    }

输入:int[] n = {1,4,5,343,45,67};

输出:1 4 5 343 45 67

对数组arr进行排序很容易,但问题需要保持arr不变。所以我尝试创建一个新数组,并对新数组进行排序,但它不起作用。

请帮忙。

【问题讨论】:

  • 必须手动排序吗?
  • 仔细重新读取复制数组的循环。
  • 此算法不能与并行数组一起使用,您可以先复制数组或使用其他算法。
  • 一个提示:在需要时不要声明局部变量。据我所知,这个简单的做法应该可以捕捉到代码中的错误。此外,还可以编写更具可读性的代码。
  • 另外我怀疑你根本不需要变量z(在整个方法中都是0,永远不会改变)。

标签: java arrays sorting methods


【解决方案1】:

如果不需要手动对数组进行排序:

private static int[] sort(int[] arr){
    int[] secondArray = new int[arr.length];
    for (int i=0; i < arr.length; i++){
        secondArray[i] = arr[i];
    }

    return Arrays.sort(secondArray);
}

【讨论】:

  • 答案很明显,但我认为这是在训练使用循环和数组。 这是原来的问题
  • 是的,我只是不喜欢做别人的功课:P
【解决方案2】:

试试这个。您总是可以选择一些不同的方法来对数组进行排序。 您使用的 Bubblesort 是最简单但不是最好的一种。
https://www.cs.cmu.edu/~adamchik/15-121/lectures/Sorting%20Algorithms/sorting.html

    int[] old = {1,4,5,343,45,67};
    int[] newOne = Arrays.copyOf(old, old.length);//copy array
    Arrays.sort(newOne);//sort

    System.out.println(Arrays.toString(old));
    System.out.println(Arrays.toString(newOne));

【讨论】:

    【解决方案3】:
    private static int[] sort(int[] arr){
        return IntStream.of(arr).sorted().toArray();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      相关资源
      最近更新 更多