【问题标题】:use same random array for each sort对每种排序使用相同的随机数组
【发布时间】:2018-03-30 11:37:57
【问题描述】:

我正在尝试这样做,所以我生成了一个随机数组,但只实现了一个具有不同排序的相同数组(以随机顺序)。我有:

public static void main(String[] args)
{
    int[] array = new int[10];
    for(int i = 0; i < array.length; i++) {
        array[i] = (int)(Math.random()*100);}

    System.out.println("\nBefore Bubble Sort: ");
    for (int element : array)
        System.out.print(element + "  "); 

    bubbleSort(array);


    System.out.println("After Bubble Sort: "); 
    for (int element : array)
        System.out.print(element + "  ");
    System.out.println("\n");

    System.out.println("\nBefore Insertion Sort: ");
    for (int element : array)
        System.out.print(element + "  "); 

    insertionSort(array);


    System.out.println("After Insertion Sort: "); 
    for (int element : array)
        System.out.print(element + "  ");
    System.out.println("\n");
}

带有相应的分类代码(如有必要,我会发布它们)。它的输出是:

Array Before Bubble Sort: 
2 64 27 1 81 60 72 6 9 82
Array After Bubble Sort: 
1 2 6 9 27 60 64 72 81 82 

Array Before Insertion Sort: 
1 2 6 9 27 60 64 72 81 82 
Array After Insertion Sort: 
1 2 6 9 27 60 64 72 81 82 

我希望这个数组2 64 27 1 81 60 72 6 9 82 也位于插入前行。冒泡排序中的排序数组只是被放入插入排序中,所以它没有做任何事情。我想我需要为随机数组创建一个方法并在每次排序时调用它?我该怎么做?或任何其他我会欣赏的解决方案。如果需要,我将编辑更多信息。

【问题讨论】:

  • 使用System.arraycopy 将您的数组复制到“夹具”中,并在每次排序执行之前将该夹具复制回来。

标签: java sorting random


【解决方案1】:

在每次排序之前克隆或复制数组并将克隆传递给排序例程。您可以使用array.clone()Arrays.copyOf(array, array.length) 进行复制。

public static void main(String[] args)
{
 int[] array = new int[10];
  for(int i = 0; i < array.length; i++) {
   array[i] = (int)(Math.random()*100);}

   System.out.println("\nBefore Bubble Sort: ");
    for (int element : array)
      System.out.print(element + "  "); 

   int[] sorted = array.clone();
   bubbleSort(sorted);


   System.out.println("After Bubble Sort: "); 
    for (int element : sorted)
      System.out.print(element + "  ");
      System.out.println("\n");

   System.out.println("\nBefore Insertion Sort: ");
    for (int element : array)
        System.out.print(element + "  "); 

    sorted = array.clone();
    insertionSort(sorted);


    System.out.println("After Insertion Sort: "); 
    for (int element : sorted)
        System.out.print(element + "  ");
    System.out.println("\n");
}

【讨论】:

  • 好的,谢谢你。然而,它似乎不是冒泡排序,当我尝试计算比较和交换时,它被视为插入排序的 0 交换。所以它“神奇地”被排序而不交换并且只是打印出排序列表。你知道为什么吗?
  • @vee - 我怀疑您没有重新克隆阵列。请参阅我更新的答案,其中我用显式代码替换了// etc.
【解决方案2】:

您应该制作一个初始数组的副本,以保持与原始数组相同的数据。

【讨论】:

    猜你喜欢
    • 2011-07-15
    • 2011-05-06
    • 1970-01-01
    • 2021-06-10
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多